0

我有一個線程,它運行一個循環,並在此循環中使用apache common http client創建與遠程服務器的連接,並從中獲取一些數據,然後休眠一段時間。我的問題是,如果網絡速度慢,CPU是否可以啓動choaking,因爲GET方法將花費較長時間來提取數據並返回。如果網絡速度慢,Java HTTP客戶端可以選擇CPU

回答

0

我不認爲這會造成很高的CPU負載,但是您的線程在GET期間可能會阻塞很長時間,這可能會導致您的程序顯得很慢。如果網絡速度慢,GET通常需要等待IO,而這通常不會佔用大量的CPU。

+0

所以當線程被阻塞時,這意味着線程仍在使用CPU並等待執行調用返回。這是同步呼叫嗎? – abhinav 2013-03-26 09:18:14

+0

線程在等待時將使用很少的CPU。該呼叫是同步的。 – SteveP 2013-03-26 09:19:16

+0

所以如果調用是同步的,是不是等同於調用需要花費大量時間執行的函數。因此,就CPU而言,線程將處於運行狀態。所以如果我們有很多這樣的線程來做這種操作,CPU就會開始挑撥 – abhinav 2013-03-26 09:22:20

0

網絡是一種I/O操作,通常由外圍設備執行,所以CPU只是等待操作完成。操作系統阻塞線程執行直到I/O操作完成。見the lifecycle of threads,它有一個特殊的狀態「被阻塞的I/O」。

+0

所以調用execute方法的線程仍然會運行並等待執行返回??/ – abhinav 2013-03-26 09:19:06

+0

@abhinav「running」和「waiting」是兩種不同的狀態。你什麼意思? – kan 2013-03-26 09:22:15

+0

所以我的問題是,如果網絡速度慢,那麼執行方法將需要更多的時間來運行和返回。所以線程會處於運行狀態的時間更長。現在,如果我有很多這樣的線程處於運行狀態,因爲執行方法沒有返回,那麼我的CPU將顯示高使用率 – abhinav 2013-03-26 09:24:12

0

沒有,它不會卡住的CPU,但應用程序將只停留(如果你有獨立的網絡線,甚至不會出現這種情況)

和網絡操作的I/O操作,所以也沒有使用CPU。所以在你的線程被阻塞的時間內,CPU時間不會被分配給那個被阻塞的線程。

+0

所以當線程被阻塞時,這意味着線程仍在使用CPU並等待執行調用返回。這是同步呼叫嗎? – abhinav 2013-03-26 09:18:30

+0

回答編輯。是的,這是一個同步呼叫。 (但僅限於I/O設備) – Ankit 2013-03-26 09:37:11