C# 处理器线程#

C# 处理器线程#,c#,multithreading,thread-safety,C#,Multithreading,Thread Safety,一个core 2 due处理器可以处理多少infinte循环?我想知道 我正在开发一个软件,我必须有2个内循环像 do{ //code }while(true); 我想知道在while体内插入thread.sleep(x)来释放一些对处理器的压力是否会有帮助,如果这是真的,那么x应该是多少呢?这取决于你想做什么。如果要占用100%的CPU时间,请不要插入任何Sleep()s。在其他情况下,插入一些您认为合适的值-例如,做10毫秒的工作,然后Sleep()10毫秒。这样,您就不会占用CPU,操作

一个core 2 due处理器可以处理多少infinte循环?我想知道

我正在开发一个软件,我必须有2个内循环像

do{
//code
}while(true);

我想知道在while体内插入thread.sleep(x)来释放一些对处理器的压力是否会有帮助,如果这是真的,那么x应该是多少呢?

这取决于你想做什么。如果要占用100%的CPU时间,请不要插入任何
Sleep()
s。在其他情况下,插入一些您认为合适的值-例如,做10毫秒的工作,然后
Sleep()
10毫秒。这样,您就不会占用CPU,操作系统将有一些优势来决定如何安排周围的作业


另外,10毫秒是Windows上最小的计划间隔。此外,您还可以选择
Sleep(0)
来通知内核(在本例中为托管线程管理器),您希望其他线程轮流处理。

您还可以尝试降低这些线程的优先级,以便您的GUI线程(如果存在的话)其他应用程序也不会冻结。

在任何情况下,现代OSs都会先管理线程,这意味着如果线程处于无限循环中,操作系统可以暂停该线程,并在该核心上运行另一个线程/进程。这意味着您可以拥有任意数量的具有无限循环的线程,操作系统将负责调度。更重要的是,如果您执行一个
线程。Sleep
,这会通知操作系统您想让其他线程去执行。

如果您只想在某个执行点执行另一个线程,那么:

x应该是0或1

但是: 0只会导致另一个线程被执行,如果它具有更高的优先级。
1将强制执行另一个线程。

在进程的地址空间耗尽之前,您应该能够在自己的线程中运行大约2000个循环。但是请参见。

除非线程体正在调用为您执行睡眠的阻塞函数(例如读取套接字),否则睡眠是必需的。在任何其他情况下,您都需要调用sleep,否则您的线程将100%使用一个cpu,耗尽资源


关于x的大小取决于线程正在处理的内容(需要处理的频率)。

0无限循环。根据定义,他们永远不会结束。不知道为什么有人投票结束这场比赛@Oded,这不取决于“句柄”的定义吗我所说的句柄是指在处理器崩溃或hangI投票关闭之前,我的应用程序可以有多少个infinte循环,因为这个问题没有合理的答案(除了上面Oded的评论……这就突破了“合理答案”定义的限制)。“视情况而定”不是真正的答案;有证据表明你的问题确实是“模棱两可、含糊不清、不完整、过于宽泛或修辞性的,无法以当前的形式得到合理的回答。”现在是的,这是我想的,但是的,while body实际上正在打开一个http连接并发送一些数据!但当我试着把线程。睡眠(200)它影响性能很多!请记住,10mS的意思是“至少10mS”,实际上它通常会更多是的,对,它会将控制权转到其他线程,并且很快就会得到它。还有很多其他线程等待CPU的注意。如果这是一个笑话,我不明白:)@Daniel Mošmondor,这个答案试图看起来像一个真正的答案,就像原始问题试图看起来像一个真正的问题一样难:)