2013-11-05 139 views
1

我想寫一個多線程的Web服務器,我應該使用線程池。我可以使用線程池的隊列,如果是這樣,你建議隊列是循環還是說雙鏈表?哪一個更適合我的網絡服務器實施?如果隊列不是一個好的選擇,那麼對於線程池推薦什麼數據結構?多線程Web服務器的線程池

+1

棧(單鏈表)應該沒問題。你需要做的就是當你需要的時候彈出一個,當你完成它時再把它推回去。不需要隊列或循環或雙向鏈接列表。 –

+1

循環隊列也可以做到這一點,看看這個漂亮,輕量級的庫:[threadpool](https://github.com/mbrossard/threadpool)。 – deltheil

+0

您可以利用最近在PHP中開發的[**應用程序服務器**](http://appserver.io),該應用程序服務器又使用C語言。 – webblover

回答

1

您可以使用任何線程安全的隊列。但是,如果該Web服務器將要承擔重任,那麼使用基於數組的無鎖隊列可能會更好,因此您只需要有時分配數組,(michael和scott的隊列基於節點,所以在幼稚的實現中,每次進入入隊時都必須分配節點,並將它們釋放到出隊列表中)。 (所以要回答,基於陣列的隊列(而不是deque)在我看來是更好的,因爲它們在不同的任務中是公平的。)

我建議你使用隊列而不是deque。 (儘管盜竊工作使用deque,但你希望公平地參加客戶端,所以deque,因爲它的行爲像堆棧,所以第一個請求將是最後一個請求。) 您可以看到無鎖併發隊列的這個頁面(這是我認爲最先進的技術) http://mcg.cs.tau.ac.il/projects/lcrq/