CPU的核、进程和线程

转自https://www.cnblogs.com/-new/p/7234332.html

一、CPU与核心

物理核

  • 物理核数量=cpu数(机子上装的cpu的数量)*每个cpu的核心数

虚拟核

  • 所谓的4核8线程,4核指的是物理核心。通过超线程技术,用一个物理核模拟两个虚拟核,每个核两个线程,总数为8线程。
  • 在操作系统看来是8个核,但是实际上是4个物理核。
  • 通过超线程技术可以实现单个物理核实现线程级别的并行计算,但是比不上性能两个物理核。

单核cpu和多核cpu

  • 都是一个cpu,不同的是每个cpu上的核心数
  • 多核cpu是多个单核cpu的替代方案,多核cpu减小了体积,同时也减少了功耗
  • 一个核心只能同时执行一个线程

二、进程和线程

理解

  • 进程是操作系统进行资源(包括cpu、内存、磁盘IO等)分配的最小单位
  • 线程是cpu调度和分配的基本单位
  • 我们打开的微信,浏览器都是一个进程
  • 进程可能有多个子任务,比如微信要接受消息,发送消息,这些子任务就是线程。
  • 资源分配给进程,线程共享进程资源。

对比

对比  进程  线程
定义 进程是程序运行的一个实体的运行过程,是系统进行资源分配和调配的一个独立单位 线程是进程运行和执行的最小调度单位
系统开销 创建撤销切换开销大,资源要重新分配和收回 仅保存少量寄存器的内容,开销小,在进程的地址空间执行代码
拥有资产 资源拥有的基本单位 基本上不占资源,仅有不可少的资源(程序计数器,一组寄存器和栈)
调度 资源分配的基本单位 独立调度分配的单位
安全性 进程间相互独立,互不影响 线程共享一个进程下面的资源,可以互相通信和影响
地址空间 系统赋予的独立的内存地址空间 由相关堆栈寄存器和和线程控制表TCB组成,寄存器可被用来存储线程内的局部变量

线程切换

  • cpu给线程分配时间片(也就是分配给线程的时间),执行完时间片后会切换都另一个线程。
  • 切换之前会保存线程的状态,下次时间片再给这个线程时才能知道当前状态。
  • 从保存线程A的状态再到切换到线程B时,重新加载线程B的状态的这个过程就叫上下文切换。
  • 而上下切换时会消耗大量的cpu时间。

线程开销

  • 上下文切换消耗
  • 线程创建和消亡的开销
  • 线程需要保存维持线程本地栈,会消耗内存

三、串行、并发与并行

待补充

四、多核下线程选择

计算密集型

  • 程序主要为复杂的逻辑判断和复杂的运算。
  • cpu的利用率高,不用开太多的线程,开太多线程反而会因为线程切换时切换上下文而浪费资源。

IO密集型

  • 程序主要为IO操作,比如磁盘IO(读取文件)和网络IO(网络请求)。
  • 因为IO操作会阻塞线程,cpu利用率不高,可以开多点线程,阻塞时可以切换到其他就绪线程,提高cpu利用率。

原文地址:https://www.cnblogs.com/gdut-gordon/p/9902713.html

时间: 2024-11-05 18:47:02

CPU的核、进程和线程的相关文章

进程、线程和上下文切换

进程是什么? 狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed). 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动.它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元. 进程的概念主要有两点:第一,进程是一个实体.每一个进程都有它自己的地址空间,一般情况下,包括文本区域(textregion).数据区域(data region

进程与线程的一个复杂解释

关于进程和线程,面试的时候被问了两次都没有答出来.第一次问完稍微看了下概念,并没有完全理解所以也没有记住,所以第二次被问到的时候也没回答出来o(╯□╰)o.. 所以这次把这个问题彻底解决一下. 标题是模仿阮一峰大大的"进程与线程的一个简单解释",见http://www.ruanyifeng.com/blog/2013/04/processes_and_threads.html,里面比喻得很形象. 定义 进程(英语:process),是计算机中已运行程序的实体.进程为曾经是分时系统的基本

Linux 进程、线程运行在指定CPU核上

/******************************************************************************** * Linux 进程.线程运行在指定CPU核上 * 说明: * affinity参数决定了进程.线程是否可在CPU多核之间切换,当然,并不是说就不进行 * 线程切换. * * 2017-9-22 深圳 龙华樟坑村 曾剑锋 *********************************************************

认识cpu、核与线程

前言:作为一个后台开发人员,我想有必要了解这些基础知识.如果本文有不严谨或者疏忽的地方,请指正. 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 java多线程系列(三)之等待通知机制 java多线程系列(四)之ReentrantLock的使用 cpu与核心 物理核 物理核数量=cpu数(机子上装的cpu的数量)*每个cpu的核心数 虚拟核 所谓的4核8线程,4核指的是物理核心.通过超线程技术,用一个物理核模拟两个虚拟核,

linux 将进程或者线程绑定到指定的cpu上

基本概念 cpu亲和性(affinity) CPU的亲和性, 就是进程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器,也称为CPU关联性:再简单的点的描述就将指定的进程或线程绑定到相应的cpu上:在多核运行的机器上,每个CPU本身自己会有缓存,缓存着进程使用的信息,而进程可能会被OS调度到其他CPU上,如此,CPU cache命中率就低了,当绑定CPU后,程序就会一直在指定的cpu跑,不会由操作系统调度到其他CPU上,性能有一定的提高. 软亲和性(affinity) 就是进程要在指

CPU与进程和线程

CPU的介绍:参考博客:https://blog.csdn.net/stpeace/article/details/80101441 官名叫做微处理器,微处理器由一片或少数几片大规模集成电路组成的中央处理器,这些电路执行控制部件和算数逻辑部件的功能. CPU从逻辑上可以划分成3个模块,分别是 1控制单元: 控制单元是整个CPU的指挥控制中心,由 程序计数器PC(Program Counter), 指令寄存器IR(Instruction Register).指令译码器ID(Instruction

Linux进程或线程绑定到CPU

Linux进程或线程绑定到CPU 为了让程序拥有更好的性能,有时候需要将进程或线程绑定到特定的CPU,这样可以减少调度的开销和保护关键进程或线程. 进程绑定到CPU Linux提供一个接口,可以将进程绑定到特定的CPU: #include <sched.h> int sched_setaffinity(pid_t pid, size_t cpusetsize, const cpu_set_t *mask); int sched_getaffinity(pid_t pid, size_t cpu

查看Linux进程CPU过高具体的线程堆栈(不中断程序)

1.TOP命令,找到占用CPU最高的进程 $ top top - 20:11:45 up 850 days,  1:18,  3 users,  load average: 1.04, 1.01, 0.99 Tasks:  61 total,   1 running,  60 sleeping,   0 stopped,   0 zombie Cpu(s):  1.4% us,  0.1% sy,  0.0% ni, 98.3% id,  0.1% wa,  0.0% hi,  0.2% si 

CPU进程与线程的关系和区别

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位. 进程和线程的关系: (1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程. (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源. (3)处理机分给线程,即真正在处理机上运行的是线程. (4)线程在执行过程中,需要协作同步.不同进程的线程间要利用消息通信的办法实现同步.