本文是阅读周伟民的《多核计算与程序设计》书摘

1、锁竞争:

单核中,如果单个线程取得所,则获取CPU运行时间,其他等待获取锁的线程被阻塞。使用了锁,影响的只是枷锁和解锁的耗时,CPU始终运行。
多核中,若2个(更多)线程使用同一把锁,则会导致CPU饥饿。实际还是串行化执行!
2、线程分解和执行的区别:
对单核CPU,对客户端软件,采用多线程,主要是 创建多线程将一些计算放在后台执行,而不影响用户交互操作。(用户界面 & 其他计算 并行进行)提高用户的操作性能!
多核中,分别出多个线程,不再限于将用户界面操作和其他计算分离。分解多个线程使为了让计算分配到各CPU上执行。执行线程数量与CPU核数有关!如果线程数小于核数,某些CPU肯定处于空闲状态。
3、CPU核负载平衡:
单核中不考虑 负载平衡,各个线程计算量相差很大,也不会影响程序总计算时间。
多核中,必须考虑将各个线程计算量均衡到各CPU
4、任务调度策略区别:
单核中,任务调度主要考虑分时,某些任务的优先执行!常用:时间片轮转,优先级抢占!
多核中,任务调度比单核有新的需求。要考虑 不同任务的耗时,和计算均衡!不能采用简单的时间片轮转和优先级抢占。而总的调用操作系统不能掌握。需要程序员实现!
5、CPU cache存取:
CPU读取Cache时,以行为单位读取。如果2个硬件线程的两块不同内存位于同一Cache行。当2个硬件线程同时对各自的内存进行写操作,导致2个线程同时写一个cache行。冲突!!【 伪内存问题】
单核机,不存在 伪内存问题
多核机,存在伪内存问题!想办法,使不同的内存块映射到不同Cache行
6、任务优先级抢先的区别:
单核CPU中,优先级抢占很常见的任务调度策略。
多核CPU中,多个核可导致,低优先级和高优先级的任务同时运行。需要进一步改进 优先级调度策略。
7、串行计算与并行计算、分布式计算的区别
单核多线程编程中,都是串行算法。用不到并行计算,更用不到分布式计算
多核编程中,多采用 并行计算 和 分布式计算
并行计算=并行设计模式+并行算法
分布式计算复杂度 > 并行计算的复杂度 > 串行计算复杂度
并行计算:只考虑计算并行地执行,不考虑线程间的竞争导致CPU饥饿
分布式计算:相比并行计算,能更好解决CPU饥饿,使计算均衡地分配任务到各内核

多核编程 与 单核多线程编程的区别相关推荐

  1. 多核编程与单核多线程编程

    并发:时间段内有很多的线程或进程在执行,但何时间点上都只有一个在执行,多个线程或进程争抢时间片轮流执行. 并行:时间段和时间点上都有多个线程或进程在执行. 单核cpu的话只能是并发,多核cpu才能做到 ...

  2. python3多线程编程_Python 3多线程编程学习笔记-基础篇

    本文是学习<Python核心编程>的学习笔记,介绍了Python中的全局解释器锁和常用的两个线程模块:thread, threading,并对比他们的优缺点和给出简单的列子. 全局解释器锁 ...

  3. [PYTHON] 核心编程笔记(18.多线程编程)

    18.1 引言/动机 18.2 线程和进程 18.2.1 什么是进程(重量级进程)? 计算机程序只不过是磁盘中可执行的,二进制(或其他类型)的数据,他们只有在被读取到内存中,被操作系统调用时才开始他们 ...

  4. python多线程编程_python之多线程编程

    python 之多线程编程 我们知道 python 中程序一般是从上往下依次执行的,那么即使没有什么联系的两件事也只 能是等一个执行完后再去执行另一个, 这样的就会很浪费时间, 那么有没有办法让两件事 ...

  5. Java多线程编程递增_java多线程编程之简介

    编写正确的程序很难,编写正确的多线程程序更难.如果对多线程理解的不够深入,编写出来的程序往往跟自己的预期不一样,甚至不知道问题出现在哪里.因此,如果想成为一个好的程序员,掌握多线程是必修的一门功课. ...

  6. java多线程编程核心技术 pdf_Java多线程编程核心技术之volatile关键字

    私信我或关注公众号猿来如此呀,回复:学习,获取免费学习资源包 volatile关键字 关键字volatile的主要作用是使变量在多个线程间可见. 1 关键字volatile与死循环 如果不是在多继承的 ...

  7. Python编程——多进程与多线程编程(附实例)

    进程与线程的概念 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位.每一个进程都有一个自己的地址空间,即进程空间或(虚空间).进程空间的大小只与 ...

  8. 多线程编程——基础语法篇

    多线程编程 文章目录 多线程编程 一.Thread 1.1 Thread用法一 1.2.Thread用法二 (Runnable) 1.3.Thread用法三 1.4.Thread用法四 1.5.Thr ...

  9. Java多线程编程(1)--Java中的线程

    一.程序.进程和线程   程序是一组指令的有序集合,也可以将其通俗地理解为若干行代码.它本身没有任何运行的含义,它只是一个静态的实体,它可能只是一个单纯的文本文件,也有可能是经过编译之后生成的可执行文 ...

最新文章

  1. springboot pom 依赖
  2. k2698场效应管参数电流_mos管特性曲线-电流方程与参数详解
  3. vue+axios方法封装(restful,ajax)
  4. easyui下拉多选框的创建、获取值、赋值
  5. mysql8.0日期类型_mysql8.0.19基础数据类型详解
  6. 关闭绿联硬盘盒子自动休眠的方法!
  7. 首都师范 博弈论 5 4 2 Shapley值应用案例
  8. 在合并单元格中数组公式无效_Excel|普通公式无法有效解决问题时使用数组公式...
  9. SSDT Hook技术详解与应用
  10. python中e怎么计算_Python之循环结构——实战计算自然底数e,圆周率Π
  11. 5g理论速度_5G的速度到底能有多快?
  12. MyBatis面试题1
  13. java.lang.IllegalStateException: Bindings already cleared.
  14. 服务器控件之asp:Button的onClick属性
  15. C++屌屌的观察者模式-同步回调和异步回调
  16. Compiling C
  17. LMS自适应滤波matlab仿真
  18. HarmonyOS刷机包,华为Harmony OS 2.0手机Beta版刷机包流出 采用组件化设计方案
  19. 基于模糊神经网络PID算法的液位串级控制
  20. 将沁园春长沙写出来使用html css,高一语文新教材教案全集 第一课 沁园春 长沙...

热门文章

  1. 超详细Xshell7免费版安装与连接虚拟机教程
  2. i7 7820HK和i7 7700HQ 的区别
  3. uniCloud发起小票打印,uniapp小票打印实现方案
  4. 联发科P90仍然用落后的A75核心有多少胜算?
  5. ECharts color属性设置(不透明度,透明度,线性渐变,径向渐变,扇形渐变,纹理填充)
  6. plc有与计算机的通讯请求时,自由口模式下PLC与计算机的通信
  7. php课程设计策划书,创意设计大赛策划书
  8. Coredump-N: corrupted double-linked list
  9. 我的世界java版记分板_我的世界计分板怎么用 我的世界计分板指令一览
  10. scrapy-redis案例(三)爬取中国红娘相亲网站