[概念理解] 并行VS并发、同步VS异步、阻塞VS非阻塞
之前老是遇到并行并发、同步异步、阻塞非阻塞等概念的困扰,特别是在学 Nginx 的时候,异步非阻塞,迷。。。。
并发并行
理解它们之间的区别,知道有单核多核 CPU 就差不多了。
对于 并发 ,在只有一个 CPU 资源时,系统处理多任务的方式是以时间片轮转的方式来执行任务,也即任务轮流获得 CPU 资源进而被执行,同一时刻只有一个任务被执行。
而当拥有多个 CPU 资源时,多任务会被分配给不同的 CPU 单元,也即同一时刻会有多个任务 并行 执行。
同步异步
同步异步的概念是从 消息传递方式 的角度来定义的。
在代码中比较典型的体现如下:
1 | int ret = calculateSync(); |
所以在这里,前者就是同步的调用,后者是异步的。
前者在调用之后,直到拿到结果才返回;后者在调用后立即返回,结果通过回调的方式回传。
当然,异步的回传结果的方式不止这一种,除了回调函数,还有通知和状态检查。
阻塞非阻塞
阻塞非阻塞是从 等待结果的过程 的角度来定义的。
对于 阻塞 ,当前线程/进程会被操作系统挂起,当条件满足后会通过中断的方式唤醒;非阻塞 则不会导致当前线程/进程被挂起,但是需要自己的通过不断轮询条件是否被满足,效率比较低。
Reference
https://blog.csdn.net/qq_33290787/article/details/51790605
https://www.zhihu.com/question/19732473
https://github.com/calidion/calidion.github.io/issues/40
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 爱吃胡萝卜!