1、锁

在单核上,多个线程执行锁或者临界区时,实际上只有一个线程在执行临界区代码,而核心也只支持一个线程执行,因此不存在冲突。如果某个线程持有锁,那只有其他线程不会被调度到CPU上执行,影响的只是持有和释放锁的时间,处理器时刻在运行着。但是在多核上运行时,锁或临界区会导致其余处理器空闲而只允许一个处理器执行持有锁的那个线程,这是一个串行的过程,会影响性能。
2、负载均衡

单核上不用考虑负载均衡,因为各个线程轮流执行,当一个线程执行完时,则会执行另外一个线程,不存在线程等待问题。即是各个线程的任务非诚不均衡,也不会影响总执行时间。而在多核上执行时,此时最终时间由运行时间最长的线程决定;

3、任务调度

单核上,任务调度完全是操作系统的工作,无需软件开发人员干预,通常有时间片轮转、优先级算法等。而在多核上运行时,软件开发人员要合理地在核心间分配任务,以尽量同时结束计算(操作系统转向软件开发人员)

4、程序终止

多线程环境下,程序终止时需要确定各个线程都已经计算完成。

多核多线程并行需要注意的问题:

1、线程过多:如果系统上的线程数量远远超过核心的数量,那么就会导致频繁的上下文切换,进而降低性能,如缓存污染。通常支持超线程的多核处理器能够使用的线程数最多是物理核心数的2倍,再增加就有可能降低程序的性能;

2、数据竞争:当多个线程读写同一共享数据时,便会产生竞争,需要同步,同步通常会导致线程之间的相互等待,潜在的降低了性能;另一方面,如果不使用同步程序可能无法并行。

3、死锁:线程发生死锁时,处理器都在操作(一直询问需要的资源是否可用),但是线程都在相互等待其他线程释放资源,处于僵持状态。

4、饿死:当一个或多个线程永远没有机会调度到处理器上执行,而陷入永远的等待的状态。

5、伪共享:当多个线程读写的数据映射到同一条缓存线上时,如果一个线程更改了数据,那么其他线程对该数据的缓存就要被失效,,如果频繁地更改数据,硬件就需要不停的更新缓存线,这使性能从独享缓存的水平降低到共享缓存或内存的水平。
————————————————
版权声明:本文为CSDN博主「ZIV555」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ZIV555/article/details/52036841

多线程程序在多核和单核上运行的不同相关推荐

  1. 32位程序在64位系统上运行

    32位程序在64位系统上运行 32位系统下的MFC文件,怎么在64位的系统上面运行? 先将32位的应用程序转换为64位的应用程序. 从32位应用程序到64位应用程序 编译:starlight 这篇文章 ...

  2. 都有哪些应用程序可以在M1 Mac上运行?

    如果您有幸使用新的M1 Mac,或者考虑购买一台Mac,您会想知道您需要使用的应用程序是否可以在其中运行. 苹果公司拥有Rosetta 2-一种用于翻译用于英特尔处理器的代码的工具,以便M1芯片可以理 ...

  3. 在local模式下的spark程序打包到集群上运行

    一.前期准备 前期的环境准备,在Linux系统下要有Hadoop系统,spark伪分布式或者分布式,具体的教程可以查阅我的这两篇博客: Hadoop2.0伪分布式平台环境搭建 Spark2.4.0伪分 ...

  4. 不装mono,你的.NET程序照样可以在Linux上运行

    让.NET应用程序在linux上运行,目前通用的做法就是在Linux上安装mono,然后通过"mono your.exe"命令运行这个程序. 这种运行.net程序的办法有两个弱点, ...

  5. docker 运行windows程序_如何从Windows上运行任何Linux图形GUI程序?

    Win10上的wsl模式虽然解决了运行linux程序的痛点,然而所运行的程序依然受困于Terminal中.比如emacs: 终端版本的emacs 试图获得赏心悦目的视觉效果,比如优美的字体和图形,必须 ...

  6. linux mono运行c 1,不装mono,你的.NET程序照样可以在Linux上运行!

    让.NET应用程序在linux上运行,目前通用的做法就是在Linux上安装mono,然后通过"mono your.exe"命令运行这个程序. 这种运行.net程序的办法有两个弱点, ...

  7. 安卓程序打包到安卓手机上运行Android程序

    1.Android程序打包 Android程序开发完成后,如果要发布别人使用,就需要将自己的程序打包成正式的Android安装包文件(Android  Application Package,简称AP ...

  8. 不装wine,你的.NET程序照样可以在Linux上运行!

    让.NET应用程序在linux上运行,目前通用的做法就是在Linux上安装mono,然后通过"mono your.exe"命令运行这个程序. 这种运行.net程序的办法有两个弱点, ...

  9. 打破平台限制,小程序如何在硬件设备上运行?

    在小程序技术日益成熟.生态日益善的前景下,运营者们发现小程序"即用即走.轻量开发"的特点非常契合各种硬件设备的使用场景:开发者们对"一次开发,多端运行"的诉求也 ...

最新文章

  1. UVA10110 Light, more light
  2. jQuery easyUI--弹窗的使用
  3. CodeIgniter URL添加后缀
  4. 解决CAD图层打印不出来的方法
  5. TP5开源微信小程序商城源码+附安装文档
  6. 通达信报计算机内存不足,导入通达信股票数据至内存数组中的方法和代码
  7. 免备案CDN免费 注册就送1T免费加速流量
  8. java 首次适应算法_首次适应算法java代码
  9. c字打头的语言英语单词,C字开头的励志的英文单词要C字开头的~例如Champion,Confidence,...-c英语开头名词-英语-柯拿拷同学...
  10. 强化学习1 高斯赛德尔迭代
  11. JavaWeb - 小米商城 :首页商品分类展示
  12. MATLAB调用多个核(常用于跑多次再取平均的仿真)
  13. 如何对一个复杂网络的图进行分析? 计算复杂网络相关的所有参数 批处理
  14. Django rest_framework 后端接口开发 开发与用户相关的一组接口 登录注册与用户信息查询修改
  15. K8S之初入师门第一篇熟读手册
  16. seo入门篇-搜索引擎优化
  17. dev sda2 linux lvm,记录linux LVM 扩容硬盘空间的记录
  18. 本机连过的wifi忘记密码,如何找到密码?
  19. 从培训班出来之后找工作的经历,教会了他这五件事
  20. 大转盘H5游戏的优点

热门文章

  1. asp.net 上一条和下一条记录的显示
  2. C# 中奇妙的函数–6. 五个序列聚合运算(Sum, Average, Min, Max,Aggregate)
  3. ANSYS FLEXlm License Manager的卸载方法
  4. 「SNOI2019」
  5. 如何用纯 CSS 创作一个摇摇晃晃的 loader
  6. 基本ACL与高级ACL
  7. vim 高级使用技巧第二篇
  8. POJ2503 UVA10282 Babelfish
  9. 多项目同步进行“交叉编译”
  10. dede单独显示查到了多少条记录的方法