一、概念
同步:进程在调用接口时,必须要等到接口返回数据之后,才能继续执行。
异步:进程在调用代码时,不用等接口返回数据,可以继续执行下面的代码,接口的返回可以通过回调的方式获得。
阻塞:进程在调用接口时,在接口返回之前,该进程会被挂起,必须等到接口返回后才会被唤醒。
非阻塞:进程在调用接口时,在接口返回数据之前,进程能够处理后续的操作,但是需要不断的轮询,去查看接口数据是否返回。
同步、异步和阻塞、非阻塞的区别:
同步和异步是针对于代码书写方式来说的,而阻塞和非阻塞是针对于进程是否被挂起。
二、事例
以超市买东西为例:
同步阻塞:必须等收银员将所有商品扫描完,我才能干其他的事情,在此之前我必须一直盯着他。
同步非阻塞:在收银员扫描过程中,我可以干其他的事情,不过得不断的去看扫描了多少。
异步非阻塞:在收银员扫描过程中,我可以干其他的事情,等扫描完了告诉我一下。
以accpet为例:
阻塞:当使用阻塞socket时,在调用accpet方法时,监听的端口对应的队列不为空时,会立即返回响应,如果队列为空时,操作系统就会等待新的请求到达,等新的请求到达之后,操作系统才会唤起accept调用,返回建立好的套接字。
非阻塞:当使用非阻塞socket,并且操作系统为空时,操作系统会返回一个EAGIN错误,需要再次调用accept方法,此时如果队列不为空,返回建立好的套接字。