日期:2014-05-20  浏览次数:20680 次

多核、多线程、并发概念的疑问
请问一下多线程一定多核吗?还是多核一定多线程?
多线程是不是意味着一定并发执行?‘网上各种概念太多,也太笼统,求助大神们的解答。。。
恩 还有,多核编程在有哪些经典的入门书籍呢?入门的就行
java语言方面有没有很推荐的经典书籍呢?求助
------解决方案--------------------
1、请问一下多线程一定多核吗?还是多核一定多线程?
多线程和多核没有半点关系。多线程是相对于软件的术语,多核是相对于CPU硬件的术语。
2、多线程是不是意味着一定并发执行?
是的。多线程是解决并发的方案之一。
3、多核编程在有哪些经典的入门书籍呢?
多核编程你要去找NMD或者Inter的硬件工程师。如果是多线程的话,可以参考“Thinking in java”也叫《JAVA编程思想》
4、java语言方面有没有很推荐的经典书籍呢?还是《JAVA编程思想》
5、查看CPU的使用情况?window自带的任务管理器就可以了。
6、想要直观查看一下多核编程与单核在cpu性能上的区别?如果只是想知道执行时间多少对比的话,同样的任务,多核比单核快!
7、如果下面没人回答?你知道怎么做的了,
------解决方案--------------------
请问一下多线程一定多核吗?
对于操作系统和软件来说,多线程并不意味需要多核心的CPU,事实上,2005年以前,所有的个人PC都是单核心的,但是1993年问世的Windows NT就支持多线程。操作系统采用分时的办法让多个线程平分CPU时间。

多线程是不是意味着一定并发执行?‘网上各种概念太多,也太笼统,求助大神们的解答。。。
不一定,操作系统会根据线程的亲缘性、同步和锁来调度线程。比如说两个对存储加锁的线程分别读写存储,那么它们就是交替运行的。这里解释下,并发和并行不是一个概念,并发是指宏观逻辑上的,并行则是指多个CPU同时运行。如前所述,在2006年以前,PC上往往只有一个处理器,所以对于单处理器来说,是不可能并行的。

恩 还有,多核编程在有哪些经典的入门书籍呢?入门的就行
这个分为几个层次,一个是数学、算法层次的《并行计算》一类的书籍,一个是编程语言/API层面的书,比如各种Java书籍。还有一个是操作系统、硬件和计算机体系结构方面的书,比如《操作系统》《计算机体系结构》。掌握多线程编程是一回事,真正写出能充分利用并行计算的算法,并且获得很好的加速比,又是另一回事。一些数学问题,比如十进制求圆周率,已经被数学证明是不可以并行计算,只能串行计算的,但是十六进制的圆周率计算就可以并行。像这样的知识,编程的书籍是不会告诉你的。

如果进行多核编程,有没有什么软件工具或者查看cpu的使用情况呢?我去进行多核编程,想要直观查看一下多核编程与单核在cpu性能上的区别。。。
cpuz的官方网站上有一个工具,可以通过CPU内部的计数器获得CPU使用状况。另外你可以通过比较程序的执行时间来直观获得程序的加速比。注意,Windows任务管理器中的图表是不可靠的,这主要是因为多处理器环境非常复杂,比如说一个同时具有超线程技术的双核处理器,当两个满负荷的线程在两个物理内核中执行的时候,Windows任务管理器报告使用率为50%的时候,可能真实的CPU利用率在80~90%。再比如,对于NUMA节点,Windows任务管理器不能很好地反映处理器内核的亲缘关系。