线程如何同等地服务两个数据套接字(而不是控制套接字)?

时间:2013-05-03 08:30:10

标签: linux multithreading sockets client-server

假设我们有一个单线程应用程序,它需要通过将1G字节数据分别写入两个单独的tcp套接字(每个客户端一个套接字)来为两个客户端提供服务,在这种情况下,线程如何处理这两个任务平等而持续的?

我认为这个问题存在于像Apache这样的服务器应用程序中,以Apache Web Server为例,Apache为自己设置了最大线程限制,比如它是MAX_THREADS,如果有(MAX_THREADS + 1)个未完成的请求,那里的插座意味着至少有一个线程必须平等地处理两个插座。那么apache将如何处理这种情况呢?

史蒂夫

1 个答案:

答案 0 :(得分:1)

通常当我们想要在单线程应用程序中处理多个套接字时,通常会使用以下系统调用之一

  

选择(http://en.wikipedia.org/wiki/Select_%28Unix%29

     

民意调查(http://linux.die.net/man/2/poll

     

epoll(http://en.wikipedia.org/wiki/Epoll

有关这些电话的更多信息,请参阅手册页。

一般的想法是让单个线程不被阻止等待获取资源并定期检查数据是否可用于发送或接收