对于阻塞和非阻塞,同步和异步的理解

同步和异步重点在于是进程间消息通知机制和系统内事件执行顺序
同步模型 前提条件:进程A B按顺序执行的方式运行 一次完整的执行序列为 A向B发出请求 A变为等待请求应答状态 B接受来自A的请求 B进行处理和计算 B向A发送应答 A接受应答
在本例中同步体现在 A在发出请求后进入等待B应答的状态 A需要接收到B的应答才能进入下一个状态或者是执行后续任务 这样的类似两个进程之间有按顺序的触发执行关系 就是同步模型
而异步是指 进程A B之间。

阻塞和非阻塞重点在于是进程的状态
在阻塞式IO模型下如果进程进行一次套接字读操作 但对应的套接字缓冲区中没有数据 那么该进程将会阻塞 无法进行其他操作 直到套接字缓冲区中有数据为止
在非阻塞式IO模型下 如果进程需要进行一次套接字读操作和获取系统时间操作 (那么进程请求读套接字时将会收到内核的EWOULDBLOCK错误) 此时进程不用阻塞 可以直接进行读操作之后的获取系统时间操作

举例
一个服务器,在对套接字设置了nonblock属性过后,再进行accept时,
accept将会返回Resource temporarily unavailable,查看errno将会得到EAGAIN。意味着让你再次尝试一下该操作。这是因为accept对应的是阻塞操作,若没有设置nonblock属性,监听套接字将阻塞在accept上直至有对端进行connect操作。

你可能感兴趣的:(Linux内核)