2011-09-23 65 views
1

我正在Linux上用C語言探索一個Web爬蟲的幾個概念。爲了決定是否使用阻塞IO,多路複用OI,AIO,某種組合等,我特別需要知道(我可能應該通過一些測試代碼爲我自己發現它,但爲了方便起見,我更願意從別人那裏知道)當在阻塞模式下調用IO時,它是特定線程(假設是多線程應用程序/ svc)還是整個進程本身被阻塞?更具體地說,在一個多頭(POSIX)應用程序/服務中,專用於遠程讀取/寫入的線程是否會阻止整個過程?如果是這樣,我怎樣才能在不終止整個過程的情況下解鎖這樣的線程?阻止IO如何影響Linux中的多線程應用程序/服務

注意:我是否應該使用阻塞/非阻塞並不是真正的問題。

+1

線程將是相當無用的,如果整個過程被阻塞,每當一個線程被阻止...... –

回答

1

阻塞調用僅阻止,使他們,而不是整個過程的線索。

是否要使用阻塞I/O(每個線程有一個套接字)或非阻塞I/O(每個線程管理多個套接字)都是您必須進行基準測試的。但根據經驗...

Linux可以合理有效地處理多個線程。所以如果你只處理幾十個套接字,每個套接字使用一個線程很容易編碼,並且應該表現良好。如果你正在處理數百個套接字,那就更接近了。對於成千上萬的套接字,使用一個線程(或進程)來管理大型組可能會更好。

在後一種情況下,爲獲得最佳性能,可能需要使用epoll,即使它是Linux特有的。

+0

非常感謝尼莫。我很欣賞快速反應和建議。 – EdNdee

+0

我打算一直使用大約100個併發流到不同的Web服務器(我計劃使用單個專用線程的Multiplex /異步IO)。目前,我已連接到約4萬個不同的域,幾天後下載幾GB。一直在探索的概念,但我想最後把它拼湊在一起進行測試運行。 – EdNdee

+0

這是花生。多線程應該沒問題。 –

相關問題