作为一个程序员,线程,进程,协程这些是我们必须要掌握的最基础的知识,这就好比数学家必须要学习的基本几何原理一样,没有它们,我们在编程的世界里寸步难行。

并发和并行

并发和并行是我们经常听到的两个词,并发是指同一时间段运行多个程序,比如我们一边听歌,一边打字。而并行指的是同一时刻,强调的是同一个时间点并行运行,很显然,并行要求需要多核,而并发可以单核切换运行程序,由于cpu的高速运转,所以看起来并发很类似并行执行,但是本质上两者是不同的。

多核

具有多个逻辑CPU内核并且可以物理上同时执行多条指令的计算机的处理器。计算机的“核心数”是计算机拥有的核心总数。计算机可能具有多个处理器,每个处理器可能具有多个核心;核心数是所有处理器上的核心总数。

多线程

可以通过同时在多个内核上运行来利用多核计算机的程序。通常,两倍的内核等于两倍的计算能力(对于支持多线程的程序),尽管某些问题受CPU使用率以外的因素的限制。这些问题将不会带来多线程带来的巨大收益。

多线程的意义

有时程序需要在特定时间做特定的事情。比如我们有一个可见窗口的程序。该程序可能正在进行大量的后台数字运算,但是它仍然可以响应用户事件(例如单击按钮并调整其大小),这种情况可以通过异步处理来完成,异步处理将需要您的一个线程重复检查GUI工作是否间隔执行,暂停正在执行的操作以及处理GUI一段时间。许多事情都是通过这种方式完成的。

然而,处理它的另一种可能更好的方法是使用线程。我们不需要担心该程序在逻辑运算和GUI管理之间来回切换,操作系统将为您进行管理。即使只有一个内核,您仍然可以运行多个线程,并且操作系统将尽最大努力确保所有正在运行的进程中的所有正在运行的线程都能公平分配CPU时间。

多线程和多核关系

首先两者本质上没有必然的联系,多线程可以运行在单核上,也可以运行在多核上。一个线程可以某一时间段在一个核心上运行,下一刻在另一个核心上运行。

线程是内核调度的最小单位。一个进程可以有多个线程,它们共同完成某个任务。线程是被包裹在进程中的,进程提供了线程运行的资源。

进程之间互不影响,一个进程挂掉,并不影响其它进程,然而一个进程内的一个线程出现问题 ,其它线程也无法正常运行。

CPU

CPU也叫内核,是由单晶硅以一定的生产工艺制造出来的,CPU所有的计算、接受/存储命令、处理数据都由核心执行。

CPU执行多个程序靠的是它的时钟,通过时钟中断,它可以在不同的程序之间切换,这样看上去,我们的程序就彷佛在并行执行。

超线程技术

超线程技术为CPU中存在的每个物理核心创建两个虚拟处理核心。物理核心为虚拟核心提供动力,然后虚拟核心承担任务处理的责任。每个虚拟内核都彼此相同,尽管两者都不像物理内核那么强大,但是当不启用HT时,它们合起来远远超过了物理内核的能力。这些虚拟内核的使用使CPU可以实时在内核之间委派任务。

超线程的优点

由CPU密集型操作(例如同时运行两个苛刻的程序)创建的工作负载(该操作会降低单个物理核心的运行速度,而不论其原始功率如何)都会在处理器的虚拟核心之间分配利用HT技术。使用两个虚拟内核同时处理任务,处理时间更短,程序打开速度更快,并且在多任务处理期间您的计算机将保持更高的响应速度。简而言之,超线程可提高处理效率。

多核的优势

多核技术具有超线程技术的所有优点并且具有更多的优势。超线程技术为每个物理内核使用两个虚拟内核来更有效地处理任务,而多内核技术则增加了物理内核。由于单个物理核心比单个虚拟核心更强大,因此双核处理器比具有超线程的单核处理器更强大。许多较新的型号CPU是超线程和多核的,从而实现了更高的性能。

两个线程能在cpu中同时运行吗_多核和多线程那些事相关推荐

  1. 使用 sched_setaffinity 将线程绑到CPU核上运行

    linux 提供CPU调度函数,可以将CPU某一个核和指定的线程绑定到一块运行. 这样能够充分利用CPU,且减少了不同CPU核之间的切换,尤其是在IO密集型压力之下能够提供较为友好的性能. 通过sch ...

  2. 多核cpu是并发还是并行_多核CPU及其带来的并发更改

    摩尔定律-戈登·摩尔在1965年的预测,即每个集成电路组件的数量将每18到24个月翻一番-举行了真,并预计将保持真,直到2015 - 2020年(参见相关主题 ). 直到2005年,CPU时钟速率也一 ...

  3. java中创建两种线程的方式_java中创建线程的两种方式有什么区别?

    *** 一.创建线程 1.继承Thread类 定义类继承Thread, 重写run()方法, 将线程中要执行的代码写在run()方法中 创建该类对象, 调用start()方法就可以开启一条新线程, 新 ...

  4. java 双线程交替,Java 创建两个线程,和主线程交替运行。

    原来线程都有自己默认的名称. Thread-编号 该编号从0开始. static Thread currentThread():获取当前线程对象. getName(): 获取线程名称. 设置线程名称: ...

  5. 两个线程形成死锁,是并发型的呢,还是并行型的呢

    线程是CPU调度的基本单位,假如某个线程一直运行,那CPU的某个核心就被这个线程所独占.但某个线程如果是阻塞了,那就不要一直占据CPU. 死锁形成的必要条件是线程之间有共享资源竞争,如果只是一个线程一 ...

  6. 绑定线程到特定CPU处理器

    参考这篇文章 http://blog.chinaunix.net/uid-27761170-id-5050258.html 代码如下: #define _GNU_SOURCE #include < ...

  7. java两个线程同时运行_Java实现的两个线程同时运行案例

    本文实例讲述了Java实现的两个线程同时运行.分享给大家供大家参考,具体如下: /** * 两个案例同时运行案例 * 1:这个两个线程并不是有规律的运行而是有没有规律的交替运行 */ package ...

  8. java多线程同时运行_Java实现的两个线程同时运行案例

    本文实例讲述了Java实现的两个线程同时运行.分享给大家供大家参考,具体如下: /** * 两个案例同时运行案例 * 1:这个两个线程并不是有规律的运行而是有没有规律的交替运行 */ package ...

  9. cpu的核数和进程_多线程,多进程,多核总结

    最近在做并行编程,多线程,多进程,多核的概念令人迷惑,总结一下: 计算机的cpu物理核数是同时可以并行的线程数量(cpu只能看到线程,线程是cpu调度分配的最小单位),由于超线程技术,实际上可以并行的 ...

最新文章

  1. dedecms部分文章出现读取附加信息出错的解决办法
  2. [智力考题]比尔盖茨只有3分的考题
  3. 属性值动态调整_这可能是你见过最牛的CAD粗糙度动态块了!
  4. 免费电子书:Azure Web Apps开发者入门
  5. 依靠信用卡周转生活的人多吗?
  6. 获取map中的一个value值以及遍历map获得map里所有key、value的值
  7. 怎样把任意exe程序注册成windows系统服务(手动注册服务)
  8. 程序员面试金典——18.5单词最近的距离
  9. 遭遇Asp.Net长文件名下载的问题和解决办法
  10. QT_qss文件简易使用教程
  11. 如何申请微信H5支付?
  12. 东北大学OJ-1216: 实验2-6 :计算圆椎体体积
  13. c语言水仙花数pow,c语言如何解水仙花数
  14. weblogic安装与配置注意事项
  15. dns被劫持怎么办、如何完美解决网站DNS域名被劫持
  16. UniDAC 基础 英文 原文【就不传其中的图片了】
  17. LeetCode162数组寻峰问题
  18. php随机生成汉字、随机字符串
  19. 《Learn python3 the hard way》ex42到ex43总结
  20. 不谋正业的诗人:没有副业 诗人都得饿死

热门文章

  1. 算法导论-线性时间排序习题解
  2. 开源web应用防火墙 - Naxsi
  3. GIS二次开发之上一个视图/下一个视图
  4. Java面试题:1-100之间的数,被放在数组a[99]中,有一个数没有包含在其中,用java代码找出这个数...
  5. 如何在labview中用c语言编程,编程语言之争:LabVIEW还是C语言?-测试测量-与非网...
  6. 嘉年华ON LINE首次在墨天轮和视频号并机直播,数据库内核技术抢先get
  7. 90后就敢当扫地僧!不服?4月24号来闯龙门阵!
  8. 4种方法帮你解决IntelliJ IDEA控制台中文乱码问题
  9. 让机器有温度:带你了解文本情感分析的两种模型
  10. php 串行化数据,PHP中的串行化变量和序列化对象