一直以来有这样的疑惑,在现如今多核多线程的电脑处理器之下,一个进程中的几个线程是 怎么运行的呢?(是经系统和JVM分配少量的资源 最后轮流切换 时间调度?还是这几个线程分配到不同的核上同时运行?)
今天就这一问题查了一些资料,现整理如下:

单个CPU一个时刻只能运行一个线程?
单核CPU电脑同一时间内只能执行一个线程,首先了解一下,CPU执行的过程 ,它是把时间分成若干个小时间段,这些时间段很小的,系统中有很多进程,每个进程中又包含很多线程,在同一 时间段 内,电脑CPU只能处理一个线程(线程A),而下一个 时间段 就不一定是上一个时间段内执行的那个线程(线程A)了,可能是别的线程(线程B 吧)

CPU采用的是类似于时间片轮转的机制,也就是说同一时间一条进程提出执行请求时,其他进程只能等待它执行完毕,CPU才会处理其他请求。其他进程相当于在排队等待中。当然了,为了避免某条进程无限制时间的执行,一般会限定一个时间,超时 的话,CPU根据一定的线程调度算法来切换线程。可以看做很多线程在并发执行。其实还是在某一个时间点上只有一个线程在运行罢了。
多核的话,每个核心都是同样的原理。但是两个核心就可以通过系统分配资源,同时执行不同的进程,这个就更复杂了。
每条进程都有CPU分配的进程号的。避免混乱。

一个核心就是实实在在的一个cpu处理设备 线程的概念可以理解成电脑处理信息的通道 既一个线程一个通道 一般来说一个cpu核心处理一个通道的信息 但也不是绝对 因特尔支持超线程技术的cpu每个核心可以处理两个或多个通道的信息 这就可以形容为超线程(既多出来的通道的处理能力)但前提是软件也必须的支持超线程才行 否则单核双线程或多线程也只能有单个通道工作 从某种意义上来说cpu的能力被浪费了 所以网友一般就会说 真正的核心数(通道) 比虚拟出来的核心(通道)来个更实在。最后 线程数决定这CPU能同时处理几件事情,在没有超线程技术的情况下核心数等於线程数。

java线程调度
CPU对于各个线程的调度是随机的(分时调度),在Java程序中,JVM负责线程的调度。 线程调度是指按照特定的机制为多个线程分配CPU的使用权,也就是实际执行的时候是线程,因此CPU调度的最小单位是线程,而资源分配的最小单位是进程。

JVM调度的模式有两种:分时调度和抢占式调度。

分时调度 是所有线程轮流获得CPU使用权,并平均分配每个线程占用CPU的时间;

抢占式调度 是根据线程的优先级别来获取CPU的使用权。JVM的线程调度模式采用了抢占式模式。既然是抢占调度,那么我们就能通过设置优先级来“有限”的控制线程的运行顺序,注意“有限”一次。

CPU核数 跟多线程 的关系
  要说多线程就离不开进程,进程和线程的区别在这里就不详细说了,只将关键的几点:

a)进程之间是 相互独立的,不共享 内存和数据,线程之间 的内存和数据是 公用的,每个线程只有自己的一组CPU指令、寄存器和堆栈,对于线程来说只有CPU里的东西是自己独享的,程序中的其他东西都是跟同一个进程里的其他线程共享的。

b)操作系统创建进程时要分配好多外部资源,所以开销大。(这个跟操作系统有关,有人做过实验,window创建进程的开销大,Linux创建进程的开销就很小。)

再来说一下CPU,过去单CPU时代,最先是单任务阶段 在一个时间点 只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。而现在多核CPU的情况下,同一时间点可以执行多个任务(并行),具体到这个任务在CPU哪个核上运行,这个就跟操作系统和CPU本身的设计相关了。

我们假设一个极端的情况:在一台单核计算机上只运行2个程序,一个是我们的程序A,另一个是操作系统的程序B,每个程序是一个进程。单核CPU的时候,A和B在CPU上交替运行,具体的分配方式由操作系统来判断,我这里猜测应该跟A和B的线程数有关,因为线程是CPU级别的,如果A有5个线程,B也有5个线程,那么CPU分配给A和B的时间应该是1:1的;如果A增加到15个线程,CPU分配给A和B的时间应该是3:1的比例。所以此时如果A的线程数多,那么获得的CPU执行次数就多,处理的速度也就快了。以上假设的前提是:①A和B的优先级相同,②A和B都是只消耗CPU资源的程序。

如果相同的情况用一个双核的计算机来处理又会是什么结果呢?假设这个双核的计算机和操作系统比较傻,把A进程分配到核1上,B进程分配到核2上,那不管A有几个线程,都是用核1来处理,那么时间肯定是一样的。不过现实中应该不会有这么傻的CPU和操作系统吧。所以赶紧还是会根据线程来进行处理,当A的线程比B多时,会占用核2来处理A的线程。

刚才说的是只消耗CPU资源的程序,但这样的程序在实际应用中基本上是没有的,总会有跟资源打交道的。比如读个文件,查个数据库,访问一个网络连接等等。这个时候多线程才真正体现出优势,在一个进程中,线程a去读文件,线程b去查数据库,线程c去访问网络,a先用一下CPU,然后去读文件,此时CPU空闲,b就用一下,然后去查数据库,……,相对于读文件、查数据库、访问网络来说CPU计算的时间几乎可以忽略不计,所以多线程实际上是计算机多种资源的并行运用,跟CPU有几个核心是没什么关系的。

https://my.oschina.net/xiaotian120/blog/196201 (java线程调度)
http://blog.csdn.net/ziwen00/article/details/38097297(这篇写的也不错)

原文链接:https://blog.csdn.net/qq_33530388/article/details/62448212

CPU核心数目 与 多线程相关推荐

  1. CPU核心数与多线程执行效率的关系

      昨天面试时被问到"CPU核心数量与多线程执行效率有关系吗",当时脑袋有点蒙,直接就回答了"没关系",今天早上仔细一想,发现自己也不知道到底有没有关系,于是上 ...

  2. linux内核如何支持多核cpu,现在的多核CPU,Linux操作系统是否能够实现单个进程(多线程)的多核调度(跨CPU核心调度)?...

    现在的多核CPU,Linux操作系统是否能够实现单个进程(多线程)的多核调度(跨CPU核心调度)? 关注:106  答案:2  mip版 解决时间 2021-02-02 01:11 提问者你說.你愛我 ...

  3. Java多线程学习九:怎样确定线程数量及CPU 核心数和线程数的关系||如何定制自己的线程池

    调整线程池中的线程数量的最主要的目的是为了充分并合理地使用 CPU 和内存等资源,从而最大限度地提高程序的性能.在实际工作中,我们需要根据任务类型的不同选择对应的策略. CPU 密集型任务 首先,我们 ...

  4. 线程池大小设置和CPU核心数的关系

    文章目录 1.线程池和CPU核心数的关系 2.常见概念:CPU的核心数,CPU的线程数 3.是否使用线程池就一定比使用单线程高效呢? 1.线程池和CPU核心数的关系 一般说来,大家认为线程池的大小经验 ...

  5. CPU 和 CPU Core 有啥区别?多核 CPU?多个 CPU?单核 CPU 为何也支持多线程呢?

    由于现在大多计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发,但提高并发并不意味着启动更多的线程来执行.更多的线程意味着线程创建销毁开销加大.上下文非常频繁,你的程序反而不能支持更高的T ...

  6. CPU核心数和线程数的关系

    多核心:也指单芯片多处理器( Chip Multiprocessors,简称CMP),CMP是由美国斯坦福大学提出的,其思想是将大规模并行处理器中的SMP(对称多处理器)集成到同一芯片内,各个处理器并 ...

  7. CPU核心数和线程数的关系 *

    多核心:也指单芯片多处理器( Chip Multiprocessors,简称CMP),CMP是由美国斯坦福大学提出的,其思想是将大规模并行处理器中的SMP(对称多处理器)集成到同一芯片内,各个处理器并 ...

  8. java超线程_超线程多核心下Java多线程编程技术分析

    在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述超线程多核心下Java多线程编程技术分析,更多Java专业知识,广州疯狂 ...

  9. cpu核心 线程 进程_科个普:进程、线程、并发、并行

    一.进程 刘大胖打开电脑,想写点东西,于是打开WPS,突然又想和女朋友(反正我不信)聊聊天,就又打开了微信PC端,这时操作系统就会为这两个程序生成两个进程,如图:二.线程每个进程至少包含一个线程,线程 ...

最新文章

  1. 2016/01/13开始学习git:分支管理:Bug分支
  2. Windows系统笔记本禁用自带键盘
  3. mysql忘记密码,怎么办?
  4. 秋季海报设计元素|水彩手绘纹理植物素材,从人群中脱颖而出。
  5. shell正则表达式截取字符串_从CVE20208816聊聊shell参数扩展
  6. 腾讯牵线,美团欲37亿美元收购摩拜?
  7. oracle数据库考试答题,Oracle数据库试题
  8. 2022化工自动化控制仪表复训题库及模拟考试
  9. js 调用谷歌插件截图跨域的iframe---FireShot
  10. python打印朱莉娅集合
  11. 谷歌学术搜索 简易PDF爬虫
  12. LBS(基于位置服务)常见定位技术综合分析
  13. 命令提示符命令(cmd)
  14. 【高等数学笔记】多元向量值函数的导数与微分
  15. 「读书感悟系列」苏世民:我的经验与教训
  16. 用Cocos Creator 模拟书本翻页效果
  17. 换一种姿势挖掘任意用户密码重置漏洞
  18. html3D效果可以在手机打开吗,HTML手机怎么打开
  19. 计算机组成原理时序发生器qd,计算机组成原理—微程序控制器组成实验
  20. 1.04 docker的网络

热门文章

  1. 关于Oracle数据库start whith 递归查询的另类认知
  2. 今日早报 每日精选12条新闻简报 每天一分钟 知晓天下事 2月17日
  3. 今日简报 每日精选12条新闻简报 每天一分钟 知晓天下事 4月13日
  4. 查找一个一堆数中的一个数
  5. 筋斗云案例 - animate、transition都能实现
  6. HDU - 6609
  7. 个人博客/博客管理系统/Siteserver cms
  8. EXCEL取小数点数值
  9. Pytorch 深度学习结果无法复现的解决办法
  10. 劳务派遣经营许可证怎样办理