我有一個在端口中偵聽的TCP/IP線程(主線程)。當一個TCP/IP請求到來時,我產生一個線程來處理請求。如果工作線程是CPU綁定的(想象一個從1到1000000的循環,它什麼都不做),我不能接收到另一個tcp/ip請求。所以SO沒有給切片時間給監聽線程。工作線程CPU綁定
我該如何解決這個問題?這是一個實現問題嗎?當tcp/ip數據包進入tcp/ip堆棧時,SO必須給偵聽線程一個分片時間?
謝謝!
我有一個在端口中偵聽的TCP/IP線程(主線程)。當一個TCP/IP請求到來時,我產生一個線程來處理請求。如果工作線程是CPU綁定的(想象一個從1到1000000的循環,它什麼都不做),我不能接收到另一個tcp/ip請求。所以SO沒有給切片時間給監聽線程。工作線程CPU綁定
我該如何解決這個問題?這是一個實現問題嗎?當tcp/ip數據包進入tcp/ip堆棧時,SO必須給偵聽線程一個分片時間?
謝謝!
在工作線程中使用WinAPI函數SwitchToThread()
或Sleep(0)
,以便它將其時間片放棄到系統中的其他線程/進程。或者在Delphi中,使用TThread.Yield
。
這是解決方案嗎?程序員負責在線程內部創建代碼。所以,如果他做了一段時間(真)循環,我不能接收其他TCP/IP連接。 – 2011-05-17 15:11:33
這是否意味着您無法控制CPU綁定線程的功能?如果是的話太糟糕了。可能提高您的監聽線程的優先級可以提供幫助。 – 2011-05-17 16:53:58
我將嘗試爲一個cpu內核分配我的偵聽線程。 – 2011-05-22 22:33:05
什麼語言/環境? – 2011-04-07 02:19:02
什麼是「SO」? – Gabe 2011-04-07 02:20:20
Delphi7等都是windows。 – 2011-04-07 18:49:44