阻塞、非阻塞、同步、异步

181 阅读1分钟

阻塞非阻塞、同步异步总是放在一起说,但其实它们是针对的不同的场景。

阻塞、非阻塞

阻塞、非阻塞是指数据就绪前要不要等待。

怎么理解数据就绪前呢?当一个线程去执行很费时的操作,比如要从磁盘读数据,读IO的速度很慢,当前线程是否要一直等待直到数据返回呢?如果是要一直等待数据就绪,就是阻塞,否则就是非阻塞。非阻塞的线程可以立即返回,然后去处理其他事情。

同步、异步

同步、异步是指数据就绪后,谁来操作。 如果是当前线程去操作,就是同步,如果是操作系统直接操作好通知线程读取就是异步。

这里说的操作其实是涉及到谁来触发操作系统把数据从内核态的缓冲区中读取到用户缓冲区。同步的话就是当前线程触发,异步就是操作系统自己触发。但数据的复制都是由操作系统来操作的。