多CPU和多核CPU对应多进程和多线程调度_多核cpu在cnc上的协调-程序员宅基地

技术标签: 计算机基础  cpu  

目录

cpu架构和工作原理

计算机有5大基本组成部分,运算器,控制器,存储器,输入和输出。运算器和控制器封装到一起,加上寄存器组和cpu内部总线构成中央处理器(CPU)。cpu的根本任务,就是执行指令,对计算机来说,都是0,1组成的序列,cpu从逻辑上可以划分为3个模块:控制单元、运算单元和存储单元。这三个部分由cpu总线连接起来。

CPU的运行原理就是:控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后CPU将这个地址里的指令读到指令寄存器进行译码。对于执行指令过程中所需要用到的数据,会将数据地址也送到地址总线,然后CPU把数据读到CPU的内部存储单元(就是内部寄存器)暂存起来,最后命令运算单元对数据进行处理加工。周而复始,一直这样执行下去。

多核cpu和多cpu

架构

多个物理CPU,CPU通过总线进行通信,效率比较低。

多核CPU,不同的核通过L2 cache进行通信,存储和外设通过总线与CPU通信

cpu的缓存

CPU缓存是位于CPU与内存之间的临时数据交换器,它的容量比内存小的多但是交换速度却比内存要快得多。CPU缓存一般直接跟CPU芯片集成或位于主板总线互连的独立芯片上。

随着多核CPU的发展,CPU缓存通常分成了三个级别:L1L2L3。级别越小越接近CPU,所以速度也更快,同时也代表着容量越小。L1 是最接近CPU的, 它容量最小(例如:32K),速度最快,每个核上都有一个 L1 缓存,L1 缓存每个核上其实有两个 L1 缓存, 一个用于存数据的 L1d Cache(Data Cache),一个用于存指令的 L1i Cache(Instruction Cache)。L2 缓存 更大一些(例如:256K),速度要慢一些, 一般情况下每个核上都有一个独立的L2 缓存; L3 缓存是三级缓存中最大的一级(例如3MB),同时也是最慢的一级, 在同一个CPU插槽之间的核共享一个 L3 缓存。

读取数据过程。就像数据库缓存一样,首先在最快的缓存中找数据,如果缓存没有命中(Cache miss) 则往下一级找, 直到三级缓存都找不到时,向内存要数据。一次次地未命中,代表取数据消耗的时间越长。

计算过程。程序以及数据被加载到主内存;指令和数据被加载到CPU的高速缓;CPU执行指令,把结果写到高速缓存;高速缓存中的数据写回主内存

进程和线程

进程

进程是程序的一次执行过程,是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,

线程

线程是CPU调度和分派的基本单位,它可与同属一个进程的其他的线程共享进程所拥有的全部资源。

  • 联系

线程是进程的一部分,一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

  • 区别:理解它们的差别,从资源使用的角度出发。(所谓的资源就是计算机里的中央处理器,内存,文件,网络等等)

根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。

所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)

内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。

包含关系:没有线程的进程可以看做是单线程的,如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一部分,所以线程也被称为轻量级进程。

进程和线程在多核cpu,多cpu中的运行关系

操作系统会拆分CPU为一段段时间的运行片,轮流分配给不同的程序。对于多cpu,多个进程可以并行在多个cpu中计算,当然也会存在进程切换;对于单cpu,多个进程在这个单cpu中是并发运行,根据时间片读取上下文+执行程序+保存上下文。同一个进程同一时间段只能在一个cpu中运行,如果进程数小于cpu数,那么未使用的cpu将会空闲。

多线程的概念主要有两种:一种是用户态多线程;一种是内核态多线程,对于内核态多线程(java1.2之后用内核级线程),在操作系统内核的支持下可以在多核下并行运行;
对于多核cpu,进程中的多线程并行执行。对于单核cpu,多线程在单cpu中并发执行,根据时间片切换线程。同一个线程同一时间段只能在一个cpu内核中运行,如果线程数小于cpu内核数,那么将有多余的内核空闲。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/HideInTime/article/details/119379876

智能推荐

Python学习笔记——removebg库之抠图-程序员宅基地

文章浏览阅读2.8k次。1.搜索remove.bghttps://www.remove.bg/2.翻译(网站翻译或者谷歌翻译)首页底端3.登陆账号(没注册注册)4.获取密钥4.14.24.34.44.55、查看API5.15.2跳转到GitHubhttps://github.com/brilam/remove-..._removebg

如何在获取全部数据后通过js纯前端实现分页效果_纯js前端实现分页代码-程序员宅基地

文章浏览阅读9.3k次,点赞4次,收藏36次。之前一直使用前后端配合的方式实现分页效果,即在后台将数据进行分页处理,前端向后端发送页数参数,单独的请求某一页的数据。目前在数据量不是很大的基础上要实现js纯前端分页,找了几个插件没有很好的解决方案,最后参照网络博客使用js实现。说明:在调研过程中参考了一位大神的博客,但是忘记了博客链接,部分代码直接来自于该博客。_纯js前端实现分页代码

win10 C语言qt调试,如何在Windows中调试Qt(MSVC)应用程序-程序员宅基地

文章浏览阅读2.4k次。在Windows环境下,使用Qt Creator开发Qt过程中一定会遇到调试问题。如何在Qt Creator里面单步调试呢?一般来说,我们开发Qt应用程序,都会使用QtCreator,QtCreator默认为Qt和C++的开发提供了很多帮助,尤其是集成的帮助、提示,和代码跳转。但是,当进行代码调试的时候,就不如VisualStudio方便了。(我会告诉你们,当博主精神状态不好的时候,写代码,单..._qt 调试器 debugger for windows 10

JavaFX的WebView中通过JavaScript回调Java的程序_javafx html script不加载-程序员宅基地

文章浏览阅读1w次。根据官网给出的例子,自己写了个总是调用不成功。以下是官网例子代码:http://docs.oracle.com/javase/8/javafx/embedded-browser-tutorial/js-javafx.htmimport javafx.application.Application;import javafx.application.Platform;import j_javafx html script不加载

使用Kotlin的Android ProgressBar-程序员宅基地

文章浏览阅读1.6k次。In this tutorial, we’ll discuss and implement ProgressBar in our Android Application using Kotlin. 在本教程中,我们将使用Kotlin在Android应用程序中讨论和实现ProgressBar。 什么是ProgressBar? (What is a ProgressBar?)ProgressBa..._kotlin协程更新 progressbar

关于异常抛出机制_抛异常机制-程序员宅基地

文章浏览阅读2.2k次。****************try catch使用********************************************************************* try{ //1:抛出异常的代码 //2:代码 }catch(){ //3:代码 //4:抛出异常 }finally{ //5:代码 } //6:代码 首先要明确的一点是:不管try是否_抛异常机制

随便推点

mysql openrowset_SQL的OPENROWSET开启和使用方法-程序员宅基地

文章浏览阅读470次。1、开始—>所有程序—>MicrosoftSQLServer2005—>配置工具—>SQLServer外围应用配置器—>功能的外围应用配置器—>实例名—>DatabaseEngine—>即席远程查询—>启用OpenRowset和OpenDatasource支持。2.代码启用启用:execsp_con..._mysql openrowset

css3的attr函数使用,加载unicode矢量图标_svg图片的unicode-程序员宅基地

文章浏览阅读824次。加载阿里矢量图标除了使用class与svg,我们也可以使用attr加载使用unicodecss3函数var,calc,attr的使用使用css的attr特性简单实现计数器的效果本文示例code example[4]最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。_svg图片的unicode

ESP32 Arduino 怎么上传烧录程序_esp32每次烧录都要按boot-程序员宅基地

文章浏览阅读5.4k次,点赞7次,收藏18次。今天买了块esp32版,买回来后,按着官方提供的视频去安装好 arduino,结果烧录上去,一直提示connecting中,第一反应,是不是版子坏了?去联系了某宝客服,由于时间太晚,客服爱回不回的样子。那只能去官方交流群问问了,结果也是好久才有人回答。群友的回答是:用g0口接地,后来下载成功了。高兴的在群里发了一个红包。这个就和node mcu,stm32版子有所不同了,这些版子boot都默认用跳线帮接地了。接着我百度了一下,有三种方法下载1、用g0口接地。2、下载时,一直按_esp32每次烧录都要按boot

小程序路由传参报错:SyntaxError: Unexpected end of JSON input_unterminated string in json at position 10-程序员宅基地

文章浏览阅读494次。小程序路由传参,参数转换报错:SyntaxError: Unexpected end of JSON input原因:小程序路由传参对参数长度有限制,当传递的参数超出限制时,会被截取。//item为要传递的对象wx.navigateTo({ url: '/XX?item=' + JSON.stringify(item) })onLoad(options){ //options是接收的item参数 ,此时的item参数由于长度超出限度,已经被截取 console.log_unterminated string in json at position 10

zookeeper+kafka集群部署+storm集群-程序员宅基地

文章浏览阅读125次。zookeeper+kafka集群部署+storm集群一、环境安装前准备:准备三台机器操作系统:centos6.8jdk:jdk-8u111-linux-x64.gzzookeeper:zookeeper-3.4.11.tar.gzkafka: kafka_2.11-1.0.1.tgzstorm:apache-storm-1.2.2.tar.gz配置/etc/hosts(三台..._大数据 集群 hadoop strom集群zookeeper配置

Springboot整合富文本编辑器wangEditor(上传文件到七牛云)_wangeditor 配置对象存储-程序员宅基地

文章浏览阅读1.6k次,点赞2次,收藏6次。背景最近项目上要用到富文本编辑器,开始想用Ueditor,发现需要配置的东西比较多,折腾了好久没弄好,后来发现wangEditor比较好整合,又轻又好用,能满足大多需求,然后就爽快的用了wangEditor。官网地址http://www.wangeditor.com/使用手册https://www.kancloud.cn/wangfupeng/wangeditor3/332599..._wangeditor 配置对象存储