并行计算的一些概念
博客专区 > MarcoWu 的博客 > 博客详情
并行计算的一些概念
MarcoWu 发表于2年前
并行计算的一些概念
  • 发表于 2年前
  • 阅读 6
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

并行计算的一些概念

1.同步和异步

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

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

2.并发和并行

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

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

3.临界区

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

4.阻塞和非阻塞

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

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

5.死锁、饥饿和活锁

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

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

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

6.并发级别

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

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

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

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

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

7.关于并行的两条定律

8.Java内存模型(JMM)

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

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

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

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

9.More... 


标签: java 多线程
共有 人打赏支持
粉丝 0
博文 2
码字总数 2071
×
MarcoWu
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: