同步:执行一个操作之后,需要等待这个结果,收到结果之后继续执行后续的操作,主动读写数据。
异步:执行一个操作后,可以去执行其他的操作,然后等待通知或者自己隔段时间时间再回来执行刚才没有执行完的操作;只需要I/O操作完成的通知,并不主动读写数据,由操作系统内核完成数据的读写。
阻塞:进程给cpu传达一个任务之后,一直等待cpu处理结束,才会执行后面的操作。
非阻塞:进程给cpu传达任务之后,会继续处理后面的操作,隔一段时间再来询问之间的操作是否完成。
异步与同步是一个过程,针对应用程序来说,关注的是进程之间的协作关系;
阻塞与非阻塞是一个状态,关注的是单个进程的状态;
例如买书,当你打电话问老板有没有这本书,老板会告诉你,等一等我查一下,(可能几秒可能几小时)
一:当你一直在什么事情都不做,就等待老板给你结果,这个过程就是同步
二:当你问过老板之后,老板说我查到了给你回电话,就是没有收到老板的结果,你继续去做别的事情,等老板查到知道机会给你打电话,这个过程就是异步
三:你什么事情都不做,电话挂接通你一直在等着的这个状态就是阻塞
四:你挂掉电话,去玩别的事情的,隔段时间还是会打电话问一下老板,这个状态是非阻塞
同步、异步属于两个进程中间的协作关系,例如使用浏览器访问一个网站,需要多次请求服务端,才能加载完整个页面的内容。
同步的操作如下:浏览器首先发送第一个请求,等待服务器回复后,再发送第二个请求,依次类推,直到所有请求完成。
异步的操作如下:浏览器发送第一个请求,可以不用等待服务器返回,可以继续发送第二个请求。
阻塞与非阻塞属于进程的API执行动作的方式,例如进行需要read数据,
阻塞方式操作流程是:如果没有数据,则read会一直等着数据到来,才能进行后续的动作;非阻塞则:是read没有到数据后,则可以进行后续的动作,当有数据的时候再回来读取。通常linux网络API默认都是阻塞的,例如connect、send、recv等。