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

前言:作为一个后台开发人员,我想有必要了解这些基础知识。如果本文有不严谨或者疏忽的地方,请指正。

目录

  • 认识cpu、核心与线程
  • java多线程系列(一)之java多线程技能
  • java多线程系列(二)之对象变量的并发访问
  • java多线程系列(三)之等待通知机制
  • java多线程系列(四)之ReentrantLock的使用
  • java多线程系列(五)之synchronized ReentrantLock volatile Atomic 原理分析
  • java多线程系列(六)之线程池原理及其使用

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利用率。

总结

  • 提高性能的一种方式:提高硬件水平,处理速度或核心数。
  • 另一种方式:根据场景,合理设置线程数,软件上提高cpu利用率。

转:认识cpu、核与线程相关推荐

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

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

  2. taskset -pc PID 查看线程占用cpu核

    taskset -pc  PID 可以用于 查看 当前线程 对应绑定的 在 哪个核上面. 这个 可以用于 程序优化, 查看 哪个线程占用的 cpu 比重比较高 首先 可以通过  top  -H   - ...

  3. 为什么要把进程/线程绑定到特定cpu核上运行?(cpu core id coreIdx)opdevsdk_sys_bindThreadCoreId()

    看海康hikflow_demo代码,在线程处理函数里调用了绑定函数,把这个线程绑定到某个cpu核上,不知为何要这么做? 原因 答1 现在大家使用的基本上都是多核cpu,一般是4核的.平时应用程序在运行 ...

  4. linux指定cpu运行程序,进程/线程绑定到特定CPU核的linux实现(有代码有实例)

    前言 现在计算机上的CPU大多都是多核的,有4核甚至是8核的.但是一个计算机启动之后其进程数是远远多于CPU核数的,因为操作系统会给自动调度这些进程在CPU核上轮流运行.但是对于应用程序或者进程,其性 ...

  5. c和cpp实现CPU核上绑定固定线程

    文章目录 参考链接: 相关概念及工具 CPU亲和性 查看cpu有几个核 命令查看 代码查看 代码讲解 cpu集(cpu_set_t) cpu_set_t的使用 非动态分配cpu_set_t 动态分配c ...

  6. Linux系统操作(21):物理cpu数、cpu核数、逻辑cpu数、几路几核几线程、CPU信息详细查询方法

    文章目录 一.名词解释 二.查看CPU信息 参考文献 未看完的参考文献 一.名词解释 CPU(Central Processing Unit): 中央处理单元, 物理cpu数: 物理CPU数就是实际S ...

  7. CPU个数、CPU核心数、CPU线程数

    核心概念 CPU个数:CPU芯片个数 CPU的核心数:是指硬件上存在着几个核心. 比如,双核就是包括2个相对独立的CPU核心单元组,四核就包含4个相对独立的CPU核心单元组. 线程数:一种逻辑的概念, ...

  8. i5四核八线程怎么样_四核八线程和六核六线程cpu相比哪个好?

    展开全部 六核六线程cpu比较好e69da5e6ba903231313335323631343130323136353331333433633464. 英特尔六核六线程是第八代的Core i5,最好的 ...

  9. 核与线程 CPU 4核8线程 的解释

    1.物理CPU: 物理CPU就是计算机上实际配置的CPU个数. 在linux上可以打开cat /proc/cpuinfo 来查看,其中的physical id就是每个物理CPU的ID,能找到几个phy ...

最新文章

  1. Traumland--梦乡--IPA--德语
  2. 非对称性密钥加密 java 实例_JAVA实现非对称加密
  3. 打包指令_Linux系统常用指令总结
  4. Find和FirstOrDefault()有什么区别?
  5. 电脑故障,路由器及网络
  6. bzoj 4571 美味 —— 主席树
  7. 用java数组实现栈
  8. RoboBee和RoboFly领衔微型昆虫机器人:从“上天入海”到“挣脱束缚”
  9. 十大热门编程语言的介绍
  10. 航测和倾斜摄影处理软件汇总
  11. numpy npy,npz,csv文件存取
  12. 安卓手机投屏到win10电脑无需安装任何软件(电脑和手机必须连接同一网络或者wifi)【投影到此电脑灰色无法操作怎么办?】by qiweb 端午节
  13. 复杂网络的任意子节点的网络最短距离
  14. 网盘搜索引擎(原创: 涔歌 涔歌 2018-03-25 特别说明,不同网盘搜索引擎搜录内容、搜索算法、提供的功能不同造成搜索结果差异较大,找不到时可以多尝试几个)...
  15. 高效程序员秘籍(6):使用CLCL加快写代码的速度
  16. Google Guava 工具类库
  17. 2022年5月26日:用C#生成.NET应用程序--创建新的.NET项目并使用依赖项(部分没看懂。)
  18. 解决蓝牙耳机自动暂停播放音乐的问题
  19. 组合逻辑电路二——数字逻辑实验
  20. The Fundamentals of Commodity Futures Returns(Gary B. Gorton,Fumio Hayashi,K. Geert Rouwenhorst)

热门文章

  1. 可持久化Splay 学习笔记
  2. Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4) dfs + 思维
  3. AtCoder Beginner Contest 192 F - Potion 背包dp
  4. Knowledge is Power Gym - 102822K
  5. 二分算法:平均值(洛谷 UVA1451)
  6. YbtOJ-变量观测【鸽笼原理】
  7. P2012-拯救世界2【EGF】
  8. P3808,P3796-[模板]AC自动机(简单版/加强版)
  9. P1494-[国家集训队]小Z的袜子【分块优化莫队】
  10. codeforces1435 D. Shurikens