网络编程概念 同步/异步/阻塞/非阻塞

同步/异步/阻塞/非阻塞

同步和异步:

同步和异步对应于调用者与被调用者,它们是线程之间的关系,两个线程之间要么是同步的,要么是异步的。

  • 同步操作时,调用者需要等待被调用者返回结果,才会进行下一步操作。

  • 异步操作时,调用者不需要等待被调用者返回调用即可进行下一步操作,被调用者通常依靠事件、回调等机制来通知调用者结果。

同步和异步 IO:

同步 IO 是用户线程发起 I/O 请求后需要等待或者轮询内核 I/O 操作完成后才能继续执行。

异步 IO 是用户线程发起 I/O 请求后仍可以继续执行,当内核 I/O 操作完成后会通知用户线程,或者调用用户线程注册的回调函数。


阻塞和非阻塞:

阻塞与非阻塞是对同一个线程来说的,在某个时刻线程要么处于阻塞,要么处于非阻塞 。阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态:

  • 阻塞调用是指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回。

  • 非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

阻塞和非阻塞 IO:

  • 阻塞 IO 是指 I/O 操作需要彻底完成后才能返回用户空间 。

  • 非阻塞 IO 是指 I/O 操作被调用后立即返回一个状态值,无需等 I/O 操作彻底完成。


同步阻塞:

发送方发送请求之后一直等待响应。

接收方处理请求时进行的IO操作如果不能马上等到返回结果,就一直等到返回结果后,才响应发送方,期间不能进行其他工作。

例子:男生向女生表白后,男生一直在等待结果,女生一直在思考结果。

同步非阻塞:

发送方发送请求之后一直等待响应。

接收方处理请求时进行 IO 操作如果不能马上得到结果直接返回一个状态值,去做其他事情。当IO操作完成后将完成状态和结果通知接收方,接收方再响应发送方,发送方才进入下一次请求过程。

例子:男生向女生表白后,男生一直在等待结果,女生决定先想想以后再说。

异步阻塞:

发送方向接收方请求后,不等待响应,可以继续其他工作。

接收方处理请求时进行IO操作如果不能马上得到结果,就一直等到返回结果后,才响应发送方,期间不能进行其他操作。

例子:男生向女生表白后,男生打篮球去了,女生一直在思考结果。

异步非阻塞:

发送方向接收方请求后,不等待响应,可以继续其他工作。

接收方处理请求时进行 IO 操作如果不能马上得到结果直接返回一个状态值,去做其他事情。 当IO操作完成后将完成状态和结果通知接收方,接收方再响应发送方,发送方才进入下一次请求过程。

例子:男生向女生表白后,男生打篮球去了,女生玩瑶去了。

猜你喜欢

转载自blog.csdn.net/qq_41112238/article/details/106586309