黑马程序员技术交流社区
标题:
多线程在多核CPU是如何实现的呢?
[打印本页]
作者:
724681149
时间:
2011-10-16 15:14
标题:
多线程在多核CPU是如何实现的呢?
日常我们教学将的都是单核CPU下开启的多线程的问题。而我们现在用的电脑越来越高效,配置越来越好,出现了多核CPU。那么在多核的情况下多线程的同步和通信与传统单核CPU下有什么不同呢?线程间的同步和通信又该如何处理?
作者:
罗亚东
时间:
2011-10-16 15:37
首先,启动若干个线程,各线程执行若干时间的简单程序,在线程执行结束以后,等待若干时间后,
使用单线程执行这个简单程序,在windows系统下,打开任务管理器的性能标签,根据执行期内的性能
占用情况分析线程与多核处理器下的性能分解的关系。这个测试分别用10线程和100线程进行了测试。
package com.icefox.test.mulcore;
import java.util.Date;
public class MulCoreTest {
private int continueSecond; // 线程持续时间,默认20秒
public MulCoreTest(){
continueSecond=20;
}
public MulCoreTest(int continueSecond){
this.continueSecond = continueSecond;
}
public int getContinueSecond(){
return this.continueSecond;
}
/**
* 线程测试方法,先执行指定时间的多线程,
* 再执行指定时间的单线程,
* 查看资源管理器,证明线程与cpu核心的关系
* @throws InterruptedException
*/
public void testThread() throws InterruptedException{
/**
* 多线程执行
*/
System.out.println("Mul Thread run");
for(int i=0;i<100;i++){
new CustThread().start();
}
/**
* 休息30秒
*/
Thread.sleep((this.continueSecond+30)*1000);
/**
* 单线程执行
*/
System.out.println("Single Thread run");
testSingleThread();
}
/**
* @param args
* @throws InterruptedException
*/
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
MulCoreTest mul = new MulCoreTest();
mul.testThread();
}
/**
* 单线程测试
*
*/
public void testSingleThread(){
Date startTime = new Date();
while(true){
System.out.println("Single Thread");
Date nowTime = new Date();
if((nowTime.getTime()-startTime.getTime())/1000>continueSecond){
break;
}
}
}
}
作者:
想好了再写
时间:
2011-10-16 19:41
我记得好像学习的时候说,其实现在我们用的双核处理器,只是两个运算核心,不是实际的两个内核,也就是说两个处理核心是连接在一个内核上的,核心之间以芯片速度通信,进一步降低了处理器之间的延迟,所以双核的比单核的快。其他的好像就跟单核没什么太大的差别吧。就像我们的硬盘,其实物理硬盘只有一个,但是我们有时候还是问,你的电脑分了一个盘?
额。。。 差不多是这个样子吧
作者:
想好了再写
时间:
2011-10-16 19:49
刚才百度到了的连接
http://baike.baidu.com/view/1443165.htm
http://bbs.itheima.com/forum.php ... tid=2478&extra=
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2