zoukankan      html  css  js  c++  java
  • 有关并发的概念

    1、concurrency vs. parallelism(并发与并行)

    这两个的区别在于:并发是指多个任务都在进行,但是他们可能不是同时的,比如有时间片的轮换。并行是指多个任务确确实实同时都在进行。

    2、asynchronous vs. synchronous (异步与同步)

    方法调用在这种情况下认为是同步的:调用者不能继续执行,直到该方法返回一个值或者抛出一个异常。异步方法调用允许调用者经过有限步骤后继续执行,方法调用结束后通过其他机制通知调用方(比如:回调,消息等)。一个同步的API可能是用阻塞来实现同步的,但是这不是必须的,比如一个CPU密集型的任务也可以有类似于阻塞的行为。

    3、Non-blocking vs. Blocking(非阻塞与阻塞)

    如果一个线程的延迟(delay)会无限期的延迟其他的线程,我们就说线程发生了阻塞,比如以互斥方式访问共享资源的时候,当一个线程正在访问资源的时候,其他需要访问这个资源的线程就阻塞了,处于停止执行的等待状态。非阻塞就是没有线程可以阻塞其他的线程的执行。

    4、Deadlock vs. Starvation vs. Live-lock (死锁,饿死与活锁)

    死锁是指参与者中的任何一方都在等待其他一方到达某种状态,自己才能继续执行的现象。死锁与阻塞密切相关,一般由阻塞引起的。

    与死锁现象中的所有方都不能执行不同,饿死是指参与者中的一些可以执行,而另外一些永远得不到执行的一种现象。比如基于线程优先级的调度算法,如果写的不好的话,低优先级的线程永远得不到执行。

    活锁和死锁的现象一样,都是所有方都不能执行。与死锁不一样的是它产生的原因,活锁是参与各方不停的改变自己的状态,一个例子就是:两个线程都有两个相同的资源可用,每一方都需要请求一个资源,同时判断另一个线程是否也请求该资源,如果是,就去请求另一个资源,这样最坏的情况可能就是两个资源在两个线程之间被踢皮球一样,踢来踢去。

    5、Race condition(竞争条件,正确性依靠于事件发生的相对时间或者顺序,是一种需要特别注意的问题)

    check-and-act是一种race condition,read-modify-write也是一种race condition 如 i++。一般都要为race condition加锁来避免一些错误。

    java中的锁是可重进锁,就是说同一个线程可以多次申请同一个对象的锁,并且获得通过。所以作为对象上的锁不光要记录锁的所有者,还需要锁被同一个所有者引用的次数。

  • 相关阅读:
    sqlserver用windows方式验证登录踩过的坑
    jdk8对象集合转map集合
    监听程序当前无法识别连接描述符中请求的服务解决方案
    Java上传文件至SFTP服务器
    记一次学习kibaba踩过的坑(Windows环境)
    CSRF跨站请求伪造与XSS跨域脚本攻击讨论
    LVS简单搭建(一)
    LVS+keepalived简单搭建(二)
    JZ2440开发板学习 1. 刚接触开发板, 安装驱动
    用STM32CubeMX创建FreeRTOS项目
  • 原文地址:https://www.cnblogs.com/winson/p/3230375.html
Copyright © 2011-2022 走看看