【发布时间】:2012-06-27 05:06:36
【问题描述】:
在 C++ 中,我阅读了一些教程来创建一个可以接受来自多个客户端的连接的服务器。他们建议使用异步套接字,但我真的不知道为什么我们应该选择异步而不是非阻塞模式。使用多线程的想法又是怎样的呢?它比使用异步套接字更好吗?谢谢!!
【问题讨论】:
-
这很大程度上取决于整个应用程序的设计。如果它已经是异步/事件驱动的,那么使用异步套接字可能是最好的,如果它已经有自己的事件循环或轮询,那么使用带有轮询的非阻塞套接字可能是最好的,如果你想接收连接然后“忘记”关于他们(很像一个网络服务器)然后线程将运行良好。
-
作为我的评论的附录,关于线程......当连接彼此独立并且不需要与其他连接和/或主线程通信时,它们会很好。
-
如果您使用线程,那么您可以更进一步,使用 IOCP 减少所需的线程数,同时增加您可以处理的连接数。与主线程通信并不是避免线程化连接的理由。大多数套接字逻辑不需要访问主线程,因此它会从线程中受益。主线程访问应该是小操作,所以不会使线程非常慢。
标签: c++ multithreading asyncsocket winsock2