论坛首页 Java企业应用论坛

并发2000个线程的CPU占用的问题

浏览 3352 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-05-07  
在做个高并发的项目,发现个的情况向大家请教。

下面的代码很简单。就是开2000个线程,线程里就是个死循环,每次循环sleep 20 ms.

当 sleep 20 ms的时候,我的CPU占用10-50%左右。
可是当改为sleep 19或者21 ms的时候,CPU占用一直100%。

为啥?

	public static void main(String[] args) {
		for (int i = 0; i < 2000; i++) {
			new Thread() {
				public void run() {
					while (true) {
						try {
							Thread.sleep(20);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
				}
			}.start();
		}
	}


   发表时间:2008-05-08  
恩,我有这个关于多线程的困惑,期待解答ing
0 请登录后投票
   发表时间:2008-05-08  
我建议你在运行程序的同时用vmstat观测一下CPU的状态,特别是context switch和interrupts这两项,对比sleep 19和sleep 20两种情况下context switch和interrupts有没有很大的差别。

0 请登录后投票
   发表时间:2008-05-08  
robbin 写道
我建议你在运行程序的同时用vmstat观测一下CPU的状态,特别是context switch和interrupts这两项,对比sleep 19和sleep 20两种情况下context switch和interrupts有没有很大的差别。


谢谢建议。我忘记说了。只有在Windows下发生,没法vmstat。
0 请登录后投票
   发表时间:2008-05-08  
对我来说没什么多大差别

sleep 21 还是20的时候

差不多都占用了95 %以上
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics