网络编程Day4-并发并行与同步异步

并发与并行的区别

  • 并发:是指系统具有处理多个任务的能力。 单个CPU可以通过高频率的切换达到并发效果。

  • 并行:是指系统具有 同时 (唯一的时间节点)处理多个任务的能力。 多核CPU能实现并行效果。


并行是并发的一个子集,并行一定是并发,而并发不一定是并行。

虽然当任务量小时,并发给我们的直观感受好像也是同时完成的任务,但其实是利用CPU高速计算,频繁的切换进程(15毫秒)来实现的。



同步与异步的区别

  • 同步: 你总是做完一件再去做另一件,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。换句话说,就是由调用者主动等待这个调用的结果(期间其他事情也没干)。例如socket中的recv,同步时,就一直等待用户输入,直到有结果返回。
  • 异步则反之,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。(异步方法通常会在另外一个线程中,“真实”地执行着。整个过程,不会阻碍调用者的工作。)

同步异步是描述的是一种处理机制。



阻塞与非阻塞的区别

阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.

  • 阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。(进程或线程就阻塞在那了,即挂起状态,不能做其它事情)

  • 非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。(在等待的过程中可以做其它事情)


举一个现实生活的例子吧:

有一个人想要网购买东西,他打电话问店家老板:“我想要xxx,这个价格是多少”?

如果是同步:问完之后,他就一直在电话那头等待着老板的回答;而如果是异步,他问完之后就挂断了电话,等待店家老板查询价格之后再回拨电话。

如果是阻塞,那个人就会在电话面前苦苦等待,什么事也不干;如果是非阻塞,他在挂断电话之后,可以干其他事情,期间会看看电话是否得到回复。