为了账号安全,请及时绑定邮箱和手机立即绑定

多核编程 与 单核多线程编程的区别

标签:
Java 架构

一,首先声明

并行:两件(多件)事情在同一时刻一起发生,
并发:两件(多件)事情在同一时刻只能有一个发生,由CPU快速切换,从而给人的感觉是同时进行
使用多线程来实现并行计算来缩短计算时间时,只要在多核CPU下才行,单核CPU下启用多线程最终总的计算计算一样,因为CPU在同一时间,只能服务于一个线程,
在单核CPU下运用多线程仅仅能实现快速响应用户的请求,避免因io或网络阻塞而导致界面停留卡顿。
二 ,线程分解和执行的区别
对单核CPU,对客户端软件,采用多线程,主要是 创建多线程将一些计算放在后台执行,而不影响用户交互操作。(用户界面 & 其他计算 并行进行)提高用户的操作性能!
多核中,分别出多个线程,不再限于将用户界面操作和其他计算分离。分解多个线程使为了让计算分配到各CPU上执行。执行线程数量与CPU核数有关!如果线程数小于核数,某些CPU肯定处于空闲状态。
一,多核编程与单核多线程的区别
1, 锁竞争导致的串行化的区别
在单核系统中如果某个线程获取了锁,那么这个线程将获取CPU的运行时间,其他线程将被阻塞。但CPU始终处于运行状态,影响计算时间的其实只是加锁和解锁的时间。并不会发生CPU空闲的现象。
但多核系统中情况发生了本质的变换,如果线程A和B使用同一把锁,但运行在不同的CPU上,如果A得到了锁,那么A线程所在CPU则处于运行状态,线程B处于阻塞状态,B线程所在CPU则处于空闲状态。我们浪费了一个CPU的运算时间。
图示:

2, 线程分解与执行的区别
在单核CPU中,对于客户端软件而言,采用多线程方式通常都是创建线程并将其放在后台执行,避免阻塞客户界面操作,提高性能。而在多CPU中,线程的分解将不再局限与此。多核CPU分解多线程是为了让计算分配到各个CPU核上去执行。大幅度提高工作效率。
3, CPU负载均衡的区别
在单核CPU中,并不需要考虑CPU间负载均衡的问题,因为无论线程如何切换,CPU始终处于工作状态,它并不会影响程序运行的总时间。但对于多核CPU,则一定要考虑负载均衡的问题,避免出现负载小的CPU出现空闲等待的现象。
加速比(speedup),是同一个任务在单处理器系统和并行处理器系统中运行消耗的时间的比率,用来衡量并行系统或程序并行化的性能和效果。
一个简单加速比的例子:
一个4核CPU有4个任务,各任务分别耗时 20ms,5ms,3ms,2ms

优化负载后个任务时间为 10ms,8ms,6ms,6ms

多核CPU的效率变为75%,提高的幅度还是很大的。
4, 任务调度策略的区别
在单核中,任务调度的主要工作是为个任务间取得一定的分时效果,简单的说就是保证优先级高的线程可以抢占CPU时间,先运行。在这种情况下程序员更多的是需要考虑任务的优先级。
在多核程序中,不单是要考虑任务的优先级,也要考虑各个任务的耗时,使负载均衡,提高加速比和CPU效率。在多核程序中,操作系统并不清楚我们任务的耗时,所以无法采用对我们程序最优化的调度策略来使负载均衡,因此,任务调度策略的选择也是程序员要考虑的问题。
5, CPU Cache存取的区别
在单核系统中,同一时刻只有一个硬件线程在执行,因此单核CPU是不存在Cache存储问题的。但在多核CPU中,情况则发生了变化。问题主要是因为CPU读取Cache时是以行为单位,如果两个硬件线程同时执行时,会造成两个硬件线程写同一Cache的问题,造成竞争降低效率。
6,任务优先级抢占的区别
在单核CPU情况下,优先级抢占调度是一种常见的调度策略。在多核CPU中,由于有多个任务可以同时在不同的核中运行,优先级在局部发生了变化,有可能发生低优先级的任务先完成的现象。在多核系统中需要重新考虑任务的调度策略。
例如:任务 T1,T2,T3,T4, 优先级为 T4 > T3 > T2 = T1,图示将表示出单核与多核在任务调度时的区别。
图示:

从图中表示情况是虽然T4的优先级高于T3,但T4并没有像单核CPU中先于T3完成而是基本时间相差不大。
二,多核编程与多机分布式编程的区别
1,共享存储与分布式存储的区别
在多机分布式环境中,每台计算机都有自己独立的存储器,它的内存不共享,如果要进行全局的共享数据,必须依赖于计算机间的通信来完成。在多核环境中,内存是共享的,对全局数据的共享不存在数据搬迁的问题,但是存在锁保护的问题。
因此多核环境在存储方面主要是锁竞争,分布式系统主要的问题是在通信开销方面。
2,分布式计算的区别
分布式计算中多机分布环境和多核环境面临同样的问题:负载均衡。
多机分布环境的负载均衡包括计算负载均衡和存储负载均衡,通常会涉及到负载搬迁的问题,通信开销较大。
多核环境中因为负载搬迁只是相当于指针的移动代价较小,可以忽略。
3,编程环境的区别
多机分布环境中一般使用消息传递编程模型,使用消息传递数据,入MPI;
多核环境中使用共享存储编程环境,入OpenMP等,当然也可以使用消息传递数据。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消