并发并行串行同步异步阻塞非阻塞

Posted Data+Science+Insight

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发并行串行同步异步阻塞非阻塞相关的知识,希望对你有一定的参考价值。

并发、并行、串行、同步、异步、阻塞、非阻塞

实际上同步与异步是针对应用程序与内核的交互而言的。

  • 同步过程中进程触发IO操作并等待(也就是我们说的阻塞)或者轮询的去查看IO操作(也就是我们说的非阻塞)是否完成。 
  • 异步过程中进程触发IO操作以后,直接返回,做自己的事情,IO交给内核来处理,完成后内核通知进程IO完成。

同步和异步针对应用程序来说,关注的是程序中间的协作关系;阻塞与非阻塞更关注的是单个进程的执行状态。

同步有阻塞和非阻塞之分,异步没有,它一定是非阻塞的。

阻塞、非阻塞、多路IO复用,都是同步IO,异步必定是非阻塞的,所以不存在异步阻塞和异步非阻塞的说法。真正的异步IO需要CPU的深度参与。

换句话说,只有用户线程在操作IO的时候根本不去考虑IO的执行全部都交给CPU去完成,而自己只等待一个完成信号的时候,才是真正的异步IO。

所以,拉一个子线程去轮询、去死循环,或者使用select、poll、epool,都不是异步。

1.并发VS并行

CPU在一个时间点只能执行一个线程,并发是指在同一个处理器上通过时间片轮转的方式在多个线程之间频繁切换,造成在一个时间段内同时执行多个线程的假象。

线程有五种状态:新建-就绪-运行-阻塞-终止

单个处理器并发处理线程,当一个线程被运行时,其余的线程就被挂起,处于阻塞状态,执行完当前时间片内的线程,该线程处于阻塞状态,执行下一时间片要处理的任务。

程序的设计者可以为线程指定优先级,优先级高的会被处理器优先调度,或者CPU根据任务的类型决定处理顺序,一般来说,CPU会先去处理一些IO密集型的任务,

并行是指多个处理器在某一瞬间能够同时执行多个线程,是真正意义的同时执行。

在多处理器系统中,既有并发也有并行。

2.并行VS串行

串行通信与并行通信最开始指的是数据的传输方式,数据信号是以八位二进制(也有可能是其他,原理一致)的形式传输,可以是使用一条数据线,按位以固定的时间间隔传输二进制,叫作串行通信,也可以是八条数据线一次将八位二进制数全部传输过去,叫作并行通信。

3.同步VS异步

同步是指在当存在多个任务时,当前线程一次只执行一个任务,处理完一个再处理下一个,不会开启新的线程。

异步就是开启新的线程去处理任务。

4.阻塞VS非阻塞

阻塞:在调用系统函数时,由系统决定是否将当前线程挂起,挂起之后等待函数调用结果返回,然后进入就绪态的是阻塞。

非阻塞:不挂起线程,函数立即返回,线程去执行别的任务,非阻塞不定时询问CPU处理结果,函数返回之后继续执行。

参考:并发、并行、串行、同步、异步、阻塞、非阻塞

参考:开发要搞清楚什么是并发,并行,串行,同步,异步?

参考:多线程,串行,并发,并行,同步,异步概念总结

参考:IO复用,AIO,BIO,NIO,同步,异步,阻塞和非阻塞 区别(百度)

以上是关于并发并行串行同步异步阻塞非阻塞的主要内容,如果未能解决你的问题,请参考以下文章

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

同步/异步/阻塞/非阻塞/并发/并行

深入理解并发/并行,阻塞/非阻塞,同步/异步

深入理解并发/并行,阻塞/非阻塞,同步/异步

同步与异步并发和并行阻塞和非阻塞

深入理解同步和异步阻塞和非阻塞并行和串行这几个概念