并发,并行,同步,异步,互斥,阻塞,非阻塞

并发、并行

并发:是指在同一时刻多个程序或者任务在同一个的处理器核心上同时执行

并行:是指在同一时刻,多个程序或者任务在不同的处理器核心上同时执行

互斥:同一个资源同一时间只有一个访问者可以进行访问,其他访问者需要等前一个访问者访问结束才可以开始访问该资源。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。

同步、异步

同步:同步就是顺序执行,执行完一个再执行下一个,需要等待、协调运行(运行必须严格按照规定的某种先后次序来运行)

异步:异步和同步是相对的,异步就是彼此独立,在等待某事件的过程中继续做自己的事,不需要等待这一事件完成后再工作。

注意:

1)线程是实现异步的一个方式。可以在主线程创建一个新线程来做某件事,此时主线程不需等待子线程做完而是可以做其他事情。2)异步和多线程并不是一个同等关系。异步是最终目的,多线程只是我们实现异步的一种手段。

阻塞,非阻塞

阻塞和非阻塞是当进程在访问数据时,根据IO操作的就绪状态不同而采取的不同处理方式,比如主程序调用一个函数要读取一个文件的内容,阻塞方式下主程序会等到函数读取完再继续往下执行,非阻塞方式下,读取函数会立刻返回一个状态值给主程序,主程序不等待文件读取完就继续往下执行。一般来说可以分为:同步阻塞,同步非阻塞,异步阻塞,异步非阻塞。

以发送方发出请求要接收方读取某文件内容为例。

同步阻塞

发送方发出请求后一直等待(同步),接收方开始读取文件,如果不能马上得到读取结果就一直等,直到获取读取结果再响应发送发,等待期间不可做其他操作(阻塞)

同步非阻塞

发送方发出请求后一直等待(同步),接收方开始读取文件,如果不能马上的得到读取结果,就立即返回,接收方继续去做其他事情。此时并未响应发送方,发送方一直在等待。直到IO操作(这里是读取文件)完成后,接收方获得读取结果响应发送方,接收方才可以进入下一次请求过程。(实际不应用)

异步阻塞

发送方发出请求后,不等待响应,继续其他工作(异步),接收方读取文件如果不能马上得到结果,就一直等到返回结果后,才响应发送方,期间不能进行其他操作(阻塞)。(实际不应用)

异步非阻塞

发送方发出请求后,不等待响应,继续其他工作(异步)接收方读取文件如果不能马上得到结果,也不等待,而是马上返回取做其他事情。当IO操作(读取文件)完成以后,将完成状态和结果通知接收方,接收方在响应发送方。(效率最高)

总结
  1. 同步与异步是对应的,它们是线程之间的关系,两个线程之间要么是同步的,要么是异步的

  2. 阻塞与非阻塞是对同一个线程来说的,在某个时刻,线程要么处于阻塞,要么处于非阻塞。

  3. 阻塞是使用同步机制的结果,非阻塞则是使用异步机制的结果。