millisecondsTimeout
线程被阻塞的毫秒数。指定零 (0) 以指示应挂起此线程以使其他等待线程能够执行。指定 Infinite 以无限期阻塞线程。
------------------------------------------------------------------------
于是我这样子做:
while (!isQuit)
{
if (file.isHasData)
{
....//进行处理
}
else
{
Thread.Sleep(0);
}
}
我起初认为这样子做此循环便会在isHasData为false时此线程仅占用很少的CPU,因为它会主动放弃系统为其分配的时间片,但事实上运行过程中CPU使用率几乎一直保持100%。
然后我将Thread.Sleep(0)改成Thread.Sleep(1),一切便如我所想像,CPU利用率降下来了。
1)1毫秒引起的结果为什么差别会这么大呢?
2)请问我这么做可以吗?
5 个解决方案
#1
具体情况具体对待,没有上下文不好说啊~
单从你实验过的角度,当然可行了
单从你实验过的角度,当然可行了
#2
sleep(1)要注意线程死锁问题, 0则不用考虑,如果只有一个线程访问你文件哈稀表,用sleep(1)吧
#3
我推荐用WaitHandle实现线程同步,比如ManualResetEvent
#4
的确是这样.我以前也遇到过这样的问题.
楼主可以这样算:
sleep(0)等于死循环,一秒可以执行多少次大概几万,几百万.没试过,但数字一定很大.
sleep(1)才1毫秒,但一秒最多执行1000次.
楼主可以这样算:
sleep(0)等于死循环,一秒可以执行多少次大概几万,几百万.没试过,但数字一定很大.
sleep(1)才1毫秒,但一秒最多执行1000次.
#5
to Sunmast(《.NET企业服务》翻译完毕):
可我不是用来实现线程同步目的,我只是想一直检测某一条件,比如一个ArrayList,如果有数据,做一定处理然后清空ArrayList。然后继续循环。
to lidong6(立冬):
呵,我也是像你这么考虑的。
可我不是用来实现线程同步目的,我只是想一直检测某一条件,比如一个ArrayList,如果有数据,做一定处理然后清空ArrayList。然后继续循环。
to lidong6(立冬):
呵,我也是像你这么考虑的。
#1
具体情况具体对待,没有上下文不好说啊~
单从你实验过的角度,当然可行了
单从你实验过的角度,当然可行了
#2
sleep(1)要注意线程死锁问题, 0则不用考虑,如果只有一个线程访问你文件哈稀表,用sleep(1)吧
#3
我推荐用WaitHandle实现线程同步,比如ManualResetEvent
#4
的确是这样.我以前也遇到过这样的问题.
楼主可以这样算:
sleep(0)等于死循环,一秒可以执行多少次大概几万,几百万.没试过,但数字一定很大.
sleep(1)才1毫秒,但一秒最多执行1000次.
楼主可以这样算:
sleep(0)等于死循环,一秒可以执行多少次大概几万,几百万.没试过,但数字一定很大.
sleep(1)才1毫秒,但一秒最多执行1000次.
#5
to Sunmast(《.NET企业服务》翻译完毕):
可我不是用来实现线程同步目的,我只是想一直检测某一条件,比如一个ArrayList,如果有数据,做一定处理然后清空ArrayList。然后继续循环。
to lidong6(立冬):
呵,我也是像你这么考虑的。
可我不是用来实现线程同步目的,我只是想一直检测某一条件,比如一个ArrayList,如果有数据,做一定处理然后清空ArrayList。然后继续循环。
to lidong6(立冬):
呵,我也是像你这么考虑的。