多CPU,多核,多进程,多线程

当面临这些问题的时候,有两个关键词无法绕开,那就是并行并发

首先,要先了解几个概念:

1、进程是程序的一次执行。

2、进程是资源分配的基本单位(调度单位)。

3、一个进程可以包括多个线程。

4、在单CPU计算机中,有一个资源是无法被多个程序并行使用的:CPU。

5、操作系统调度器:拆分CPU为一段段时间的运行片,轮流分配给不同的程序。

6、操作系统内存管理模块:管理物理内存、虚拟内存相关的事务。
  
由于CPU同时刻只能执行一个进程,如果我们不加以控制的话,一个进程可能使用CPU直到运行结束,于是出现了操作系统调度器,而进程也成为了调度单位。

进程的运行不仅仅需要CPU,还需要很多其他资源,如内存啊,显卡啊,GPS啊,磁盘啊等等,统称为程序的执行环境,也就是程序上下文。

在这里就出现了并发的概念,调度器切换CPU给不同进程使用的速度非常快,于是在使用者看来程序是在同时运行,这就是并发,而实际上CPU在同一时刻只在运行一个进程。

CPU进程无法同时刻共享,但是出现一定要共享CPU的需求呢?此时线程的概念就出现了。线程被包含在进程当中,进程的不同线程间共享CPU和程序上下文。(共享进程分配到的资源)

单CPU进行进程调度的时候,需要读取上下文+执行程序+保存上下文,即进程切换。

如果这个CPU是单核的话,那么在进程中的不同线程为了使用CPU核心,则会进行线程切换,但是由于共享了程序执行环境,这个线程切换比进程切换开销少了很多。在这里依然是并发,唯一核心同时刻只能执行一个线程。

如果这个CPU是多核的话,那么进程中的不同线程可以使用不同核心,真正的并行出现了。

线程是CPU调度和分配的基本单位,一定要和 进程是操作系统进行资源分配(包括cpu、内存、磁盘IO等)的最小单位 区别清楚。有句话说CPU只能看到线程,可以这么理解,假设我是CPU,我闭着眼,操作系统调度器将一个进程分配给我之后,我拿到进程睁开眼,我看到的是什么?我看到的是进程中的很多线程,那么我现在能调度和分配的是什么?进程?不行,因为我看不到其他进程,何来调度分配,只能调度我看到的那些线程,如果我是4核的话,把线程ABCD分配到核心1234,其他的线程依然要等待分配,至于等待多久,如何分配,暂不在本文讨论范围。于是线程是CPU调度和分配的基本单位。

最后说一下操作系统内存管理模块这里做的事:在这之前,程序员需要为每个程序安排运行的空间,这里的空间指的是内存的物理地址,但是这么的问题就是,每个程序都要协商如何使用同一内存的不同空间,而且程序员还要关心底层内存分配问题。解决办法就是,提出进程的概念,每个进程用一样的虚拟地址空间,CPU上增加了MMU模块负责转换虚拟地址和物理地址,虚拟地址经过操作系统和MMU之后,虚拟地址会映射到不同的物理地址,不同的进程就能获得各自独立的物理内存空间。

另外在有的操作系统里,进程不是调度单位,线程是最基本的调度单位,调度器只调度线程,不调度进程,如VxWorks。

总结:

1、单CPU中进程只能是并发,多CPU计算机中进程可以并行。

2、单CPU单核中线程只能并发,单CPU多核中线程可以并行。

3、无论是并发还是并行,使用者来看,看到的是多进程,多线程。

多CPU/多核/多进程/多线程/并发/并行之间的关系相关推荐

  1. cpu(处理器)、内存、硬盘之间的关系

    前面提到了,电脑之父--冯·诺伊曼提出了计算机的五大部件:输入设备.输出设备.存储器.运算器和控制器. 我们看一下现在我们电脑的: 键盘鼠标.显示器.机箱.音响等等. 这里显示器为比较老的CRT显示器 ...

  2. CPU、内存、磁盘IO之间的关系

    CPU和内存的关系: CPU是负责运算和处理的 内存是交换数据的 当程序或者操作者对CPU发出指令,这些指令和数据暂存在内存里,在CPU空闲时传送给CPU,CPU处理后把结果输出到输出设备上,输出设备 ...

  3. python随笔系列--多进程多线程并发度初探

    大家都知道python中由于GIL这把大锁的存在,导致python的多线程并不是真正的多线程(不同于java等语言).首先了解下GIL导致的现象:同一时间只能有一个线程占有python解释器(或者,同 ...

  4. 5000并发_彻底理解 jmeter 的线程数与并发数之间的关系

    概述 在jmeter中,只要提到并发,99%的同学立马想到线程组.需要多少并发就启动多少线程组,这已经成了大部分人的共识.这种理解方式很明显是把并发数和线程数的概念混淆了.线程组中不光有线程数,也有循 ...

  5. CPU,多核,多线程,并发,并行,计算效率

    计算机原理:CPU.并发.并行.多核.多线程.多进程 0.计算机工作流程 0.0 基础概念:计算机组成 0.1 CPU(Central Processing Unit) (1)控制单元 (2)运算单元 ...

  6. 进程,线程与多核,多cpu之间的关系

    目录 cpu架构和工作原理 多核cpu和多cpu 架构 cpu的缓存 进程和线程 进程和线程在多核cpu,多cpu中的运行关系 总结 cpu架构和工作原理 计算机有5大基本组成部分,运算器,控制器,存 ...

  7. 单核cpu多核cpu如何执行多线程

    花了很多时间来整理这方面的相关内容,参考博客:多CPU,多核,多进程,多线程 程序和进程 程序: 为完成特定任务,用某种语言编写的一组指令集合,即一段静态的代码 进程: 是程序的一次执行过程,或是正在 ...

  8. 多进程多线程 ---- Python和Java

    Python: 真正的并行执行多任务只能在    多核CPU    上实现,但是,由于任务数量远远多于CPU的核心数量,所以,操作系统会自动 的把很多任务轮流调度到每个核心上执行. 对于操作系统来说, ...

  9. cpu、socket、core、thread 等术语之间的关系

    当我们在看技术文档时,经常会发现很多有关 cpu 的术语,比如 cpu.cpu socket.cpu core.hyper-threading 等,乱乱的分不清楚,这篇文章我带大家用三分钟时间,快速的 ...

最新文章

  1. python 模拟键盘_Python 模拟键盘输入 | 学步园
  2. MySQL:8种SQL典型错误用法,值得收藏!
  3. 小程序 显示细线_精心设计:高密度显示器上的细线
  4. 使用ELK堆栈进行日志聚合
  5. 解读ASP.NET 5 MVC6系列(13):TagHelper
  6. olcd12864的u8g2库_Arduino为什么无法用u8g2驱动12864OLED屏?求找出错误
  7. SVProgressHUD的使用
  8. 深度学习中的优化算法如何理解--SGD
  9. 堪萨斯州立大学计算机科学,堪萨斯州立大学相当于国内哪所大学?
  10. DEM、DTM、DSM、DOM的区别
  11. CI/CD---使用新版云效流水线自动部署Java项目
  12. 唐巧的iOS技术博客选摘
  13. IPEmotion新增功能:交流电功率分析计算
  14. HTML5 入门( 一)
  15. ps--添加眼影效果---调整逆光照片的步骤---制作专属星空头像
  16. git 多分支添加备注、查看分支备注
  17. 微信小程序最新新闻资讯行业动态
  18. OSChina 周二乱弹 —— 你醒啦?现在你已经是丧尸了
  19. OSM道路数据下载与处理
  20. 手把手教你如何在自己的项目中引入支付宝支付

热门文章

  1. 软件设计模式——建造者模式
  2. 项目经理如何开展工作
  3. java中的“回车”与“换行”
  4. 【ELK】02、ElasticSearch基础
  5. 激光测距仪工作模式及维保——TFN BKD系列双目激光测距仪
  6. VSCode、notepa++列选择(垂直选中)快捷键方法
  7. 数据解惑 · 带你认识数字高程模型(DEM)
  8. Arcpy基础入门-4、arcpy工具进阶
  9. Python导入arcpy包出现“ImportError: No module named arcpy”
  10. SF-60/385/4PY智能浪涌保护器 带遥信功能 四川 重庆项目大力推荐应用 带通讯 上防雷系统平台