2013-02-22 64 views
2

我覺得很難相信沒有答案或教程,但我正努力在任何地方找到一個!創建一個pthread線程池來處理獲取請求

我必須(也必須)構建一個多線程服務器來處理C中的GET請求。 要獲得完整標記,需要使用線程池。目前我的主線程接受連接並將它們傳遞給一個新線程。

我可以在線查找線程池的一些實現,但來自Java背景知道他們證明是困難的。他們似乎也都使用任務隊列。

考慮到您可以將偵聽呼叫告知隊列連接,這看起來沒有必要。 我看到某處接受線程安全(說我還聽到POSIX說安全更安全嗎?) 這是一個明智的方法嗎?或者,每個線程都會等待接受,而不是停止執行直到傳遞連接,開銷會更高?

如果是這樣的話,我會怎麼做呢?我認爲我需要保留一個線程安全的數據結構來存儲指向每個線程的指針和一個指示它們是否忙的值? 並有一些方法來重新啓動線程並傳遞它的連接?但我不知道如何做到這一點,無法在互聯網上找到任何簡單的教程。

任何意見或教程鏈接將不勝感激!

感謝

回答

2

Accept()thread-safe

實際上,你所描述的是一種使用線程池實現套接字服務器的優雅方法 - 在所有這些套接字中調用accept(),並且操作系統將在連接到達時處理僅喚醒一個線程。幹得好,當我不得不實施這樣的事情時,我從來沒有真正想過這個選擇。

據我所知,在多個線程中同時調用accept()並沒有真正的開銷 - 所有線程都會休眠直到連接可以被接受,所以它們不會有效地消耗任何CPU時間。

+0

您是否擁有支持您索賠的文檔? – LtWorf 2013-02-24 12:17:50

+0

哪個說法?那沒有重大的開銷?這似乎是合乎邏輯的,因爲線程正在睡眠,正在等待'accept()'。 – ldx 2013-02-24 14:07:47

+0

不,接受將阻塞所有線程,並返回1個唯一的文件描述符爲只有1個線程。 – LtWorf 2013-02-24 14:35:53

相關問題