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

并行:多个CPU核心,不同的程序就分配给不同的CPU来运行。可以让多个程序同时执行。

并发:单个CPU核心,在一个时间切片里一次只能运行一个程序,如果需要运行多个程序,则串行执行。

同步与阻塞,异步与非阻塞的区别:
  同步与异步是对应的,它们是线程之间的关系,两个线程之间要么是同步的,要么是异步的。
  阻塞与非阻塞是对同一个线程来说的,在某个时刻,线程要么处于阻塞,要么处于非阻塞。
  阻塞是使用同步机制的结果,非阻塞则是使用异步机制的结果。

一、概念

1.     同步:调用时,在没有得到结果之前,该调用就不返回,按照这个定义,绝大多数函数都是同步调用。一般而言,我们在说同步、异步的时候,特指那些需要其他部件协作或者需要一定时间完成的任务。
最常见的例子就是 SendMessage。
2.     异步:调用者不会立刻得到结果,调用发出后,通过状态(效率低)、通知,或回调函数来通知调用者。PostMessgae。
3.     同步异步的区别:如何通知调用者得到调用结果,同步等待调用完成,异步通过状态、通知,或回调函数。
4.     阻塞:调用结果返回之前,当前线程会被挂起。socket的read/write/recv
5.     同步与阻塞的区别:同步当前线程还是激活的,只是从逻辑上当前函数没有返回而已。
6.     非阻塞:不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。
7.     异步与非阻塞的区别:非阻塞是立刻返回调用结果,异步不会立刻返回调用结果,而是通过状态,通知,回调。
8.     异步与阻塞的关系:异步也会调用阻塞的函数,比如用select 函数,当select 返回可读时再去read 一般都不会被阻塞,但是read是一个阻塞的函数。
9.     同步异步和阻塞非阻塞之间的区别:同步异步是如何通知的概念,阻塞和非阻塞是如何执行的概念。
二、        同步/异步与阻塞/非阻塞的组合分析
同步阻塞形式: 等待执行结果是一直等待,执行时线程挂起(未对fd 设置O_NONBLOCK 标志位的read/write 操作)
同步非阻塞形式:等待执行结果是一直等待,执行时函数立即返回(对fd 设置O_NONBLOCK 标志位的read/write 操作)
异步阻塞形式:不是在处理消息时一直等待(通过状态、通知,或回调函数通知主调函数select ),而是在等待消息被触发时被阻塞(线程挂起).如果select 函数,的最后一个timeout 参数为NULL,程序就会停止在select这里。
异步非阻塞形式:在处理消息是不等待,在执行消息是也不等待。

猜你喜欢

转载自www.cnblogs.com/windyrainy/p/10647905.html