同步:在发出一个功能调用时,在没有得到结果之前,该调用就不返回。必须一件事一件事的做,前一件事做完了才能继续做下一件事。
异步:在发出一个功能调用时,调用者不能立即得到结果。实际处理这个调用的部件在完成后,通过状态、通知或者回调函数来通知客户端。
阻塞:在调用结果返回之前,当前线程被挂起,函数得到结果之后才返回。
非阻塞:在不能立即得到结果之前,该函数不会阻塞当前线程,而会立即返回。
注意:
同步和异步是指Client端访问数据的机制。同步一般指主动请求并等待IO操作完毕的方式,当数据就绪后在读写的时候必须阻塞。异步是指主动请求数据后便可以处理其他任务,随后等待IO操作完毕的通知。
同步和异步主要侧重于访问数据的方式。同步需要主动读取数据,在读写数据的过程中还是会阻塞。异步只需要IO操作完成的通知,并不主动读写数据,由操作系统内核完成数据的读写。
阻塞和非阻塞是Server端访问的数据如果没有就绪,进程需要等待。简单说相当于函数内部的实现区别,也就是未就绪时是直接返回还是等待就绪。
阻塞和同步的区别:对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。阻塞是当前线程被挂起。
一个完整的I/O的两个阶段:
①查看数据是否就绪,即内核等待数据可读
②进行数据拷贝,即内核将数据拷贝到用户线程
同步IO和异步IO的区别:数据拷贝的时候进程是否阻塞,即数据拷贝是由用户线程完成还是内核完成。阻塞IO和非阻塞IO的区别:反映在IO操作的第一个阶段,查看数据是如何处理的。