今天我的老闆和我有一個關於一些代碼,我寫了討論。我的代碼從給定的HTTP/HTTPS鏈接下載3個文件。我有多線程下載,以便所有3個文件同時在3個獨立的線程中下載。在這次討論中,我的老闆告訴我,代碼將被運送給最有可能運行舊硬件和軟件的人員(我正在談論Windows 2000)。編程比較大的,線程應用程序的舊系統
直到這個時候,我從來沒有考慮線程化應用將如何擴展在老硬件。我意識到如果CPU只有1個內核,線程就沒用了,甚至可能會惡化性能。我一直在想這個下載任務是否是I/O操作。意思是說,如果一個API被阻塞等待來自HTTP/HTTPS服務器的信息,另一個想要做計算的線程會被同時調度嗎?較老的操作系統是否執行此類調度?
他說的另一件事:由於代碼將在舊機器上運行,我的應用程序不應該吃掉CPU。他說在CPU密集型任務之後調用Sleep()
來讓其他程序有一些喘息的空間。現在我總是覺得在任何程序中使用Sleep()
都很糟糕。我錯了嗎?什麼時候使用Sleep()
是合理的?
感謝您的期待!
我嚴重懷疑線程將是一個電線下載專用應用程序中的可擴展瓶頸,例如您所描述的。機會是管道飽和度將是你的限制因素。關於你的老闆「使用睡眠()」的口頭禪,......只是..哇。他認爲你的應用程序將在等待所有有線通信量時計算Pi數字? – WhozCraig 2013-02-13 16:52:55
誰使用Windows 2000,他們需要升級。 :D – 2013-02-13 17:08:48
@WhozCraig你想說它在等待I/O時不計算PI數字嗎?該死,我對世界的看法爆炸了;-) – junix 2013-02-13 17:37:06