同步/异步和阻塞/非阻塞
在关于多线程的文章中,了解过同步和异步机制,这是一个相对的术语,适用于所有类型的计算,而不仅仅是IO操作。通常异步指得是某些操作发生在另一个线程中(相对于发起请求IO计算的线程)
而阻塞和非阻塞是一种调用时的状态。
阻塞式调用则是:发起任务后,等待收到任务结果才能继续执行。
非阻塞式调用:发起任务后,在等待任务结果时,还能继续执行其他任务。
通常我们会把同步异步、阻塞非阻塞混为一谈,其实他们之间没有必然的联系,按照排列组合,也是有四种情况。
- 同步阻塞
- 同步非阻塞
- 异步阻塞
- 异步非阻塞
不过也有说法只有存在三种,即同步阻塞、同步非阻塞、异步
在广义上,”阻塞“和”非阻塞“可以粗略地来表示”同步“和”异步“,从这个意义来说,没有阻塞异步和非阻塞异步,这种说法是多余的,因为异步本身就是为了非阻塞。
但在狭义的观点上来看,阻塞和非阻塞指的是不同的内核IO接口,我们通常编写的代码的IO操作,最终都需要内核通过阻塞或非阻塞接口执行。
Socket
在之前文章中我们也了解过Socket,翻译为套接字。
Socket是基于Unix,一切皆文件的思想。它是TCP/IP协议的抽象,是操作系统对外开放的接口。
Socket