服務器需要偵聽來自多個套接字(10-20)的傳入數據。在一些初始化之後,這些套接字被創建並且不會改變(即,不接受新的套接字,並且在服務器的生命週期中它們都不會關閉)。偵聽多個套接字:選擇與多線程
一個選項是select()
在所有套接字上,然後處理每個套接字的傳入數據(即路由到正確的處理函數)。
另一種選擇是每個套接字打開一個線程並讓每個線程recv()
和處理輸入。
(第一個選項有設置超時的好處,但在這種情況下這不是問題,因爲所有套接字都非常活躍,所以這不是問題, )。
假設如下:Windows服務器,有足夠的內存,20MB(對於20個線程)是一個非問題,這些選項中的任何一個預計會比另一個快嗎?
我認爲使用10-20個套接字,爲每個套接字分配一個線程並不是問題,使用'recv()'處理通常比編程(afaik)要快一些。另請參閱本討論以獲取更多意見:http://www.gamedev.net/topic/304030-async-sockets-or-select-with-threads/ – 2012-01-27 21:25:34