【发布时间】:2016-07-09 00:29:45
【问题描述】:
我想编写一个接受传入连接并处理接收到的请求的服务器程序。我脑海中出现的第一个想法是使用带有epoll() 或select() 的非阻塞套接字。
例如,当epoll() 返回时,它会给我一个带有可用IO 事件的套接字数组。然后我必须循环套接字数组来发送和接收数据,一旦缓冲区完全接收或发送,就会执行回调函数。这也是网上讨论最多的技术。
但是,如果我使用这种技术,我的程序将在处理一个客户端连接时让所有其他套接字等待。 如果客户端的请求很耗时,是不是一种低效的方式?
在我发现的文档中,他们说这样一个线程/进程设计可以轻松同时处理数百个连接,而多线程设计总是因其复杂性、系统开销等而受到严厉批评。
因此,我的问题是:如果必须处理繁重的工作负载,如何设计高效的服务器程序?
谢谢。
【问题讨论】:
-
@SergeyA 我没有意识到这是一个如此广泛的话题。但我想我已经得到了我的答案,以及一篇值得阅读的好文章。谢谢。
标签: c multithreading sockets asynchronous epoll