2013-05-03 70 views
0

假設我們有一個單線程應用程序,並且它需要通過將1G字節的數據分別寫入兩個單獨的tcp套接字(每個客戶端一個套接字)來服務兩個客戶端,在這種情況下線程如何在兩個任務上平等地工作並不斷?一個線程如何平等地處理兩個數據套接字(而不是控制套接字)?

我認爲這個問題存在於像Apache這樣的服務器應用程序中,以Apache Web Server爲例,Apache爲自己設置了最大線程數限制,比如MAX_THREADS,如果有(MAX_THREADS + 1)和那裏的插座,這意味着至少有一個線程必須平等地處理兩個插座。那麼apache將如何處理這種情況?

史蒂夫

+1

讀http://advancedlinuxprogramming.com/ – 2013-05-03 08:48:11

回答

1

通常,當我們想在單線程應用程序來處理幾個插座,然後下面的系統調用的一個通常用來

選擇(http://en.wikipedia.org/wiki/Select_%28Unix%29

調查(http://linux.die.net/man/2/poll

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

有關這些調用的更多信息,請參見手冊頁。

的總體思路是使單個線程不被阻塞等待來獲取資源,並定期檢查數據是否可用來發送或接收

+1

也是谷歌爲' C10K問題「(因此更喜歡」輪詢「到」選擇「) – 2013-05-03 08:39:40