簡體   English   中英

Java-線程優先級和套接字

[英]Java - Thread Priorities & Sockets

我正在開發網絡爬蟲。 程序的每個線程嘗試每秒讀取3台主機(330毫秒的連接和讀取超時)。 每個線程的優先級為10(Ubuntu 12.04)。

當我設置10個線程時,搜尋器會返回150個活着的主機(主機未超時)。

當我設置400個線程時,搜尋器僅返回20個存活的主機。 我不知道有多少台主機真正存在或存在。

我的問題是,是否有可能在短時間內未執行線程,並且何時需要花費時間繼續(從CPU調度)套接字到已經超時? (因為線程處理請求的時間過長)。

如果是這種情況,我必須設置多少個線程,所以所有線程都具有相同的時間?

我正在使用Ubuntu 12.04 x64-台式機,4GB RAM,CPU i5

感覺您需要了解阿姆達爾定律 基本上,對於N個線程,您的操作速度將[基本上]小於N倍。 您只有i5,它可以一次支持2到4個並行任務。 由於增加線程旋轉,在線程之間切換以及(如果不使用調度程序或線程池)銷毀線程的成本,向系統中拋出的線程數多於系統實際無法處理的性能。

您還不能保證相等的執行時間,因為您要依賴外部因素,例如該服務器的套接字的打開以及服務器自身的連接速度。 將會有比其他服務器慢的服務器,這意味着線程從套接字讀取數據所花費的總時間將比其他服務器慢。

我不能肯定地說,由於IO,您的性能會下降,但是我建議進行性能分析和測試。 在系統上設置盡可能多的線程,然后從那里開始工作。 盡可能最好地分析您的代碼。 拋出更多線程不是一個好主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM