Linux C 笔记:Socket 的阻塞与非阻塞

概念:什么是阻塞、非阻塞?

阻塞是什么?

(是什么)阻塞调用是指调用结果返回之前,当前线程会被挂起。
(例子 1) 函数 Func 调用了函数 B,而函数 B 在很久之后才返回。在 B 返回之前,Func 所在的线程一直都在等待 B 的返回。
(例子 2) 线程调用了函数 recv,但是缓冲区一直没有数据让 recv 读取,所以线程就一直等啊等,直到缓冲区有了数据。

非阻塞是什么?

(是什么)非阻塞就是调用结果即使没有立即返回,当前线程也能继续做其他事。

那阻塞和同步不是一样了吗?

(是什么)阻塞(非阻塞)的主语是线程状态。同步(异步)的主语是函数调用。
(例子)比如上面的例子1、2,阻塞针对的是线程。而前面的笔记中说的异步(信号机制),是针对信号的处理调用。

此处我个人认为两者本质上是一样(等效)的,只是描述上不同。

多人五子棋是如何实现非阻塞的

通过 select 多路复用,详见Linux C 笔记:Socket 的 select 函数及 I/O 多路复用

参考文献

怎样理解阻塞非阻塞与同步异步的区别?
socket 由浅入深系列------socket 阻塞 与 非阻塞(五)
What are the differences between synchronized method and synchronized block (statement)?
漫话:如何给女朋友解释什么是IO中的阻塞、非阻塞、同步、异步?

Written with StackEdit.

发表留言

本站启用了垃圾评论检测插件,如果误删请联系我~