0

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

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

史蒂夫

4

1 回答 1

1

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

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

投票(http://linux.die.net/man/2/poll

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

可以在手册页中找到有关这些调用的更多信息。

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

于 2013-05-03T08:35:49.290 回答