2010-11-01 99 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