2010-11-01 97 views
2

核心2到期處理器可以處理多少個infinte循環?即時知道...處理器線程C#

IM開發一個軟件,我必須有2 infinte循環中像

do{ 
//code 
}while(true); 

如果會是有益的插入thread.sleep(x)的同時,身體內部就釋放一些壓力我想知道處理器,如果這是真的應該是多少x?

+4

0無限循環。根據定義,他們從來沒有完成。 – Oded 2010-11-01 11:08:01

+0

想知道爲什麼有人投票關閉這個! – Stacker 2010-11-01 11:18:10

+0

@已結束,是否取決於「句柄」的定義? :) – Constantin 2010-11-01 11:21:40

回答

2

這取決於你正在嘗試做什麼。如果您想要佔用100%的CPU時間,請勿插入任何Sleep()。在其他情況下,插入一些您認爲合適的值 - 例如,執行10ms的工作,然後輸入012ms10ms。這樣你就不會殺死你的CPU,操作系統將有一定的槓桿作用來決定如何安排工作。

AFAIK,10ms是Windows上最小的調度時間間隔。另外,你可以選擇Sleep(0)只是爲了通知內核(在這種情況下管理的線程管理器)你希望其他人進行處理。

+0

並記住10mS的意思是」至少10mS「,實際上它通常會更多 – smirkingman 2010-11-01 11:54:40

+0

是的,沒錯,它會把控制權交給其他線程,並且會在10ms後得到它。還有很多其他的線程都會等待CPU的注意。 – 2010-11-01 11:58:10

0

您也可以嘗試減少這些線程的優先級,以便您的GUI線程(如果存在的話)和其他應用程序不凍結。

0

在任何情況下,現代操作系統都會搶先管理線程,這意味着如果某個線程處於無限循環狀態,則可以由操作系統暫停,並在該內核上運行另一個線程/進程。這意味着您可以擁有任意數量的具有無限循環的線程,操作系統將負責安排。更重要的是,如果您執行Thread.Sleep,則會通知操作系統您希望讓其他線程順利進行。

1

如果你只是想在執行的某一點被執行另一個線程,則:

x應爲0或1

但是: 0只會造成如果要執行另一個線程它具有同等重要性。 1將強制執行另一個線程。

3

在進程的地址空間耗盡之前,您應該能夠在其自己的線程中運行大約2000個循環。但請參閱"If you have to ask, you're probably doing something wrong"

+0

如果這是個玩笑,我不明白:) – 2010-11-01 11:58:44

+0

@DanielMošmondor,這個答案試圖看起來像一個真實的答案就像原來的問題試圖看起來像一個真正的問題:) – Constantin 2010-11-01 13:09:01

1

睡眠是必需的,除非線程的主體正在調用阻塞函數(例如讀取套接字),它正在爲您做睡眠。在任何其他情況下,你需要調用睡眠,否則你的線程將使用100%的CPU,耗盡資源。

關於x應該取決於線程正在處理的內容(需要多長時間處理一次)。

+0

現在是這是我認爲,但是是身體actualy打開http連接併發送一些數據!但是當我嘗試把thread.sleep(200)它會影響性能! – Stacker 2010-11-01 11:28:43