翻译了两篇,这篇就不翻译了,自己写吧。

对于线程来说除了安全性,我们还应该重视它的生存性(我认为翻译成三个字说着比較顺)。 为了保证线程安全,我们往往须要用到同步,可是同步限制了线程的运行,线程必须为了获得共享资源而等待。等待的时间可长可短,这就体现了线程的活跃程度,假设线程仅仅是安全的运行了,而运行的非常慢,那并发也就显得不是非常必要了。所以除了保证线程的安全以外我们还必须保证线程的活跃。

同步带来了堵塞的问题,堵塞就得等待,前面提到等待的时间可长可短,最坏的情况下还可能:

死锁(deadlock)

所谓死锁就是一组线程被互相堵塞,在互相等待对方释放资源,经典的就是哲学家就餐问题,每一个哲学家都吃不到饭。

死锁发生的条件有:

1) 具有多个共享资源(被共享的对象)

2) 同一个线程锁定一个资源后,在没有解锁前想要尝试锁定另外一个资源

3) 获得共享资源的顺序不固定,资源之间没有优先级

避免以上三个条件中的不论什么一个都能够避免死锁。

也有可能发生饥饿(starvation)和活锁(livelock)

饥饿指线程一直在等待自己想要的资源而得不到,被block非常长的时间。造成这样的情况的原因可能是其它线程一直在使用这个资源,永远轮不到这个可怜的线程。狼群就餐有等级制度,如果捕获的食物不够,每次吃饭的时候那个等级最低的狼都吃不到东西,那这个可怜的狼就仅仅有饿死了。(也许实际情况不是这样,取个样例,比較好记)

活锁,这样的情况下没有堵塞,线程都是活跃的,都在运行,可是都在原地踏步,最好的样例就是两个人过过道的样例。A和B分别从过道的两头走过来,A给B让路的时候B也就A让路,如此重复,两方都在一直让路。线程没有人那么聪明,所以他们可能会一直让下去,于是就发生了活锁这样的事情。

liveness 生存性/活性相关推荐

  1. 浅析Kubernetes Pod重启策略和健康检查

    使用Kubernetes的主要好处之一是它具有管理和维护集群中容器的能力,几乎可以提供服务零停机时间的保障.在创建一个Pod资源后,Kubernetes会为它选择worker节点,然后将其调度到节点上 ...

  2. spring boot 2.5.5 reference chapter 5 生词

    5 Upgrading Spring Boot check the "migration guide" on the project wiki that provides deta ...

  3. From blockchain consensus back to Byzantine consensus

    文章目录 1. Pow model 2. 一般化的共识问题--拜占庭共识 3. 区块链共识算法 3.1 有向无环图(DAG: Directed acyclic graph) 3.2 分叉(Forks) ...

  4. Effective-Java 谨慎使用流并行

    48. 谨慎使用流并行 在主流语言中,Java 一直处于提供简化并发编程任务的工具的最前沿. 当 Java 于 1996 年发布时,它内置了对线程的支持,包括同步和 wait / notify 机制. ...

  5. 【系统分析与验证笔记】线性时间(Linear-Time,简称LT)

    线性时间行为(Linear-Time Behavior) 路径和状态图 TSTSTS的状态图记作G(TS)G(TS)G(TS),是顶点V=SV = SV=S和边E={(s,s′∈S×S∣s′∈Post ...

  6. VOGUE: Secure User Voice Authentication on Wearable Devices using Gyroscope

    VOGUE: Secure User Voice Authentication on Wearable Devices using Gyroscope VOGUE:使用陀螺仪在可穿戴设备上进行安全用户 ...

  7. kubernates 实践

    k8s 是 google 开源的一款 容器管理应用 是 docker swarm 的延续, 借鉴了一些 docker swarm 的命令方式, k8s 社区更强大,发展更好,环境特别难搭建 docke ...

  8. 分布式系统(数据复制与一致性)

    文章目录 Replication CAP Conjecture Data-centric Consistency Models Sequential Consistency Causal Consis ...

  9. K8s Liveness/Readiness/Startup 探针机制

    官方参考文档 目录 前言 一.默认健康检测 1.1 restartPolicy 1.2 测试案例 二.Liveness 三.Readiness 四.Startup 前言 玩过 Docker Swarm ...

最新文章

  1. 中小学AI教育靠谱吗?50%教师教学经验不足1年
  2. R语言使用aov函数进行双因素方差分析(Two-way factorial ANOVA)、在双因素方差分析中,受试者被分配到由两个因素交叉分类形成的组(Two-way factorial ANOVA)
  3. Bech32编码 (1)产生背景
  4. Format函数用法
  5. 『数据库』数据库系统效率Max--数据库并发控制
  6. 清华大学 张春良 计算机系,南京张春良老师小学生信息学辅导
  7. PHP 从结果集中取得一行作为关联数组:
  8. 2019聊大考研计算机调剂,2019年聊城大学硕士研究生预调剂工作说明
  9. iNFTnews | 周杰伦18年前未发布的作品Demo,藏在了区块链技术里
  10. BZOJ 3991 set维护dfs序
  11. 算高差改正数的计算机程序,水准测量中测量高差的改正数怎么计算?
  12. java实现psd格式图片读入
  13. 阿里巴巴校招笔试题整理
  14. Excel 2016图表标题不能输入中文,图表一直闪动
  15. fw300r虚拟服务器设置,迅捷(Fast)FW300RM路由器怎么设置 | 192路由网
  16. linux egg,Ubuntu下egg文件的安装与制作
  17. 请问如何判断一段文本中是否含有词典中的词语,并且把它们统计出来呀,有无大神赐教呀!!!
  18. wallproxy on ubuntu usage
  19. 怎么从pdf中提取图片?高清大图提取
  20. 双向可控硅 2N6073B

热门文章

  1. Python pow() 函数
  2. 前端开发常用免费资源,显著提升工作效率
  3. idea jsp页面没有html提示,解决IDEAJSP没有代码提示问题的几种方法.pdf
  4. mysql创建用户unix,MySQL,无法创建UNIX套接字(12)
  5. php简单的登录界面,PHP实现简单用户登录界面
  6. python测试脚本 进制转换器_使用Python内置的模块与函数进行不同进制的数的转换...
  7. linux socket 结构定义 send,Linux下Socket编程中用send发送结构体
  8. 计算机硬盘中没有什么 a文件夹,为什么硬盘上没有A和B盘?
  9. 【1024开发者节】:2019科大讯飞声博会会议记录——AI+女性,AI+5G
  10. Page Cache引起的业务问题处理