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

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

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

死锁(deadlock)

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

死锁发生的条件有:

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

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

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

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

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

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

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

liveness 生存性/活性的更多相关文章

  1. Effective Java 第三版——48. 谨慎使用流并行

    Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...

  2. k8s-pod的生命周期

    1.pod资源-spec.containers - name:镜像运行起来之后叫容器,该字段为容器名 image:镜像名字 imagePullPolicy:表示从哪拉取镜像, Always:不管本地有 ...

  3. k8s系列---kubectl基础

    kubectl get pods  查看所有pods kubectl  get  services  查看services kubectl replace --filename=myweb-rc.ya ...

  4. 拥抱K8S,Spring Boot 2.3提供K8s活性和就绪性探针

    Spring Boot 2.3将包括对Kubernetes liveness&readiness Probe的本地支持,扩展了2.2的"运行状况组"支持,允许开发人员选择运 ...

  5. 容器探针(liveness and readiness probe)

    一.为什么需要容器探针 如何保持Pod健康   只要将pod调度到某个节点,Kubelet就会运行pod的容器,如果该pod的容器有一个或者所有的都终止运行(容器的主进程崩溃),Kubelet将重启容 ...

  6. Kubernetes Pod中容器的Liveness、Readiness和Startup探针

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 探针的作用 在Kubernetes的容器生命周期管理中,有三种探针,首先要知道,这探针是属于容器的,而不是Pod: 存 ...

  7. java-并发-活性

    浏览以下内容前,请点击并阅读 声明 一个并发程序以适时方式执行的能力叫活性.以下部分介绍最常见的一种活性问题,死锁,并简单介绍其他两种活性问题,饥饿和活锁. 死锁 死锁描述了一种情况:两个或两个以上的 ...

  8. 【翻译十二】java-并发之活性

    A concurrent application's ability to execute in a timely manner is known as its liveness. This sect ...

  9. org.elasticsearch.transport.ReceiveTimeoutTransportException[cluster:monitor/nodes/liveness] request_id [31] timed out after [5000ms]

    ES连接超时,异常信息 2017-09-07 10:42:45.042 [elasticsearch[Bantam][transport_client_worker][T#17]{New I/O wo ...

随机推荐

  1. python 控制vbox虚拟机

    (本机环境:win7:python 2.7.9: vbox 4.3.12) 目标: 完成官网(https://pypi.python.org/pypi/pyvbox)上的demo: > pyth ...

  2. WVGA-维基百科

    WVGA是一种屏幕分辨率的规格,其中的W意味宽(wide),长宽比为800×480.与之相关的还有VGA(640×480)和FWVGA(854×480). WVGA并不是16:9比例,而是5:3的显示 ...

  3. 解决项目中EF5.0升级到EF6.0无法安装包的方法

    今天在vs2012上新建了一个mvc4的项目,mvc4中默认的Entity Framework是5.0的版本,如下所示: 或者:,但是项目中有些要用到EF6.0的相关方法,用EF5.0实在繁琐,于是在 ...

  4. BZOJ2542: [Ctsc2001]终极情报网

    题解: 乘积最小只需要取对数.然后反向边就变成1/c,而不是-c了. 精度问题搞得我已经我想说什么了... 贴一份网上的pascal 代码: type ss=record x,y,c,r,next:l ...

  5. 【转载】LVS+MYCAT+读写分离+MYSQL主备同步部署手册(邢锋)

    LVS+MYCAT+读写分离+MYSQL主备同步部署手册 1          配置MYSQL主备同步…. 2 1.1       测试环境… 2 1.2       配置主数据库… 2 1.2.1  ...

  6. easyui资源

    官网地址:http://www.jeasyui.com/index.php(相关文档示例,有demo, tutorial, documentation) 未混淆的源码:http://jquery-ea ...

  7. 基于VPN搭建混合云架构需要考虑的网络因素

     Joy Qiao from MSFT Wed, Jan 21 2015 8:44 AM 很多用户在搭建混合云架构时,会使用到微软Azure虚拟网络中的 VPN功能,来实现Azure中的虚拟网络与用户 ...

  8. hdu 2844 Coins

    Coins Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepted S ...

  9. (二)学习CSS之cursor属性

    参考:http://www.w3school.com.cn/tiy/t.asp?f=csse_zindex cursor 属性规定要显示的光标的类型(形状). <html> <bod ...

  10. 消息系统Kafka介绍

    1.  概述 Kafka是Linkedin于2010年12月份开源的消息系统,它主要用于处理活跃的流式数 据.活跃的流式数据在web网站应用中非常常见,这 些数据包括网站的pv.用户访问了什么内容,搜 ...