前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >并发专有名词介绍

并发专有名词介绍

作者头像
程序员小强
发布2019-09-20 16:53:44
5840
发布2019-09-20 16:53:44
举报

虽然这个世界充满了不确定性,但是你可以用自己的超级确定性,来对冲外界的不确定。作为个体,我们貌似无力反抗,但是我们手里扣着一张王牌,就是技术。

近期有朋友在后台留言,对于之前发的文章中有些并发的专有名词不是很了解,想让小强详细介绍一下,为了满足大家对技术的求知欲望,小强专门在2019年的第一天介绍这些并发专有名词,基础依旧要。

同步和异步

同步异步是来形容方法的一次调用的,同步必须等方法调用结束后才可以继续后续的操作,而异步方法调用就会返回可以继续后续操作了,真正的执行一般在另外一个线程中。

并发和并行

这两个概念都是表示2个或者多个任务一起执行,而并发侧重的是多任务交替执行,就是一个时间点就只有一个任务,时间碎片很小。而并行是真正意义的同时执行,某个时间碎片有大于1个任务在执行。

临界区

临界区这个概念非常重要,就是多个线程都会操作到的一个公共资源或者共享的数据,但是每次操作只能一个线程使用,而一旦临界区资源被占用,其他的线程必须等待该资源的释放,在并行程序中,临界区资源都是受保护的,如果不保护就会出现问题,达不到预期的效果。

阻塞和非阻塞

阻塞和非阻塞是形容多个线程之间的相互影响的(前提是多个线程而不是一个),一个线程占用了临界区资源那么其他线程必须在临界区之外等待,阻塞是操作系统层面挂起,上下文切换了,所以性能不高。阻塞如果一个线程一直占用不释放资源,那么其他需要该临界区资源都必须一直等。非阻塞就是运行多个线程同时进入临界区,只要保证不把数据修改坏就行。

由于临界区的存在,多线程并发必须受到控制。根据控制并发的策略,大概可以分为一下几种:阻塞、无饥饿、无障碍、无锁、无等待。

  • 阻塞

上面已经解释了。

  • 无饥饿

由于线程直接的具有优先级,如果线程调度会优先调用优先级高的,那么优先级低的可能一直无法执行,就会饥饿,如果锁是公平的,都是按照先进先出就不存在饥饿了就是无饥饿。

  • 无障碍

阻塞其实是悲观锁,就是多线程一起修改临界区数据可能会被修改坏,所以每次只能一个人进行修改,其他需要等待,而无障碍的表示的一种非阻塞调度,他是一种乐观锁,他任务多个线程一起修改临界区数据也未必会把临界区数据修改坏,所以可以放开让多线程都进来,一种宽进严出的策略。如果发现一个线程在临界区操作遇到数据竞争,产生冲突,他就会回滚操作,进行重试,可能会出现死锁的情况 a依赖b b依赖a 都不断重试。

  • 无锁

是在无障碍的前提上面加一个约束,就是保证有一个线程可以胜出的,可能存在饥饿问题。

  • 无等待

是在无锁的前提上面加一个约束,就是保证所有线程都可以在有限步内完成。

今天的内容就介绍到这里,最后小强祝愿大家能够在2019年有质的进步,有一句话与大家共勉:“对未来的慷慨,是把一切献给现在”。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MoziInnovations 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 同步和异步
  • 并发和并行
  • 临界区
  • 阻塞和非阻塞
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档