文档章节

并行计算的一些概念

MarcoWu
 MarcoWu
发布于 2015/12/23 16:40
字数 834
阅读 16
收藏 0

并行计算的一些概念

1.同步和异步

  • 同步:同步方法调用一旦开始,调用着必须等到方法调用返回后,才能继续后续行为。

  • 异步:异步调用更像一个消息传递,一旦开始,方法调用就会立刻返回,调用着就可以继续后续工作。

2.并发和并行

  • 并发:侧重于多个任务交替进行,类似于单核cpu的时间片切换。

  • 并行:真正意义上的“同时执行”。

3.临界区

  • 指一种公共资源或者共享数据。

4.阻塞和非阻塞

  • 阻塞:一个线程占用了临界区资源,那么其它线程就会挂起等待

  • 非阻塞:与阻塞相反,强调没有一个线程可以妨碍其它线程执行,所有线程都会尝试不断前行。

5.死锁、饥饿和活锁

  • 死锁:所有资源都无法同时拿到所需要的资源。

  • 饥饿:指某一个线程因为一些原因无法获得所需要的资源。

  • 活锁:资源不断在两个线程中跳动,而没有一个线程可以同时拿到所有资源而正常执行。

6.并发级别

  • 阻塞:一个线程阻塞的,那么在其它线程释放资源之前,当前线程无法继续执行。

  • 无饥饿:线程之间是有优先级的,线程调度的时候总是倾向于满足高优先级的线程。但如果锁是公平的,满足先来后到,那么饥饿就不会产生。

  • 无障碍:是一种最弱的非阻塞调度,不会因为临界区的问题导致一方被挂起。对于无障碍的线程一旦检测到数据在修改,为了防止把数据修改坏,会立即对自己所做的修改进行回滚,确保数据安全,如果没有数据竞争,那么就顺利完成自己工作,走出临界区。

  • 无锁:无锁都是无障碍的,区别在于无锁的并发保证必然有一个线程能够在有限步内完成离开临界区。

  • 无等待:无锁式要求有一个线程可以在有限步内完成,而无等待则是要求所有的线程都必须在有限步内完成。

7.关于并行的两条定律

8.Java内存模型(JMM)

  • 原子性:指一个操作不可中断,即使在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程干扰。

  • 可见行:指一个线程修改了某一个变量的值,其他线程能否立刻知道这个修改。

  • 有序性:在并发时,程序执行可能会出现乱序。直观的表现为,写在前面的代码,会在后面执行。

出现这种情况的原因可能为指令重排,一个指令的执行主要有这么几步:
1.读取IF
2.译码和取寄存器操作数 ID
3.执行或者有效地址计算 EX
4.存储器访问 MEM
5.写回 WB
因为指令不会一次就执行完,所以就会出现乱序。

9.More... 


© 著作权归作者所有

上一篇: java 并行基础
下一篇: java 并行基础
MarcoWu
粉丝 0
博文 2
码字总数 2071
作品 0
徐汇
程序员
私信 提问
【更新】引入闭包的目的是什么?

提供匿名函数的实现方式 可将更多的逻辑封装在函数内 减少小函数的数量,代码更紧凑 没有减少代码编写量,没有对代码逻辑有明显的简化 新概念(相对于大多数coder),耍酷 ------------------...

深蓝苹果
2013/09/16
294
7
C#~异步编程再续~大叔所理解的并行编程(Task&Parallel)

并行这个概念出自.net4.5,它被封装在System.Threading.Tasks命名空间里,主要提供一些线程,异步的方法,或者说它是对之前Thread进行的二次封装,为的是让开发人员更方便的调用它,对于异步...

mcy247
2017/12/05
0
0
并行计算与分布式计算区别与联系

并行计算、分布式计算以及网格计算和云计算都是属于高性能计算(HPC)的范畴,主要目的在于对大数据的分析与处理,但它们却存在很多差异。我们需要了解两者的原理、特点和运用的场合,对云计...

架构师技术联盟
2018/10/09
0
0
一年走向【Java架构师】之葵花宝典

大多数时候,不是我们不努力,而是不知从何下手,我深知一份好的学习资料是多么的重要,我们通常会把大量的时间都浪费在找资源上,本人搜集学习java架构师的经典学习路线如下可供参考!!! 一...

我一路狂奔
2017/05/20
622
1
Erlang/OTP 20.2 发布,动态类型编程语言

Erlang/OTP 20.2 发布发布了,Erlang 是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适合于构建分布式,...

周其
2017/12/14
999
1

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
5
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
10
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
1K
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部