- 论坛徽章:
- 0
|
原帖由 wflyfox 于 2007-6-11 11:03 发表
阻塞模式下,调用accept,connect,read等函数会阻塞进程直到成功或者失败
非阻塞方式下,调用阻塞函数时(如read),如果没有数据可读,立即返回EAGAIN,不会阻塞在函数调用。
什么叫同步、异步呢?
请解答
同步,异步的概念本来是通信领域的, 很难解释清楚, 但我肯定他跟阻塞非阻塞完全没有任何关系。
在这里的同步异步, 我个人的理解是函数调用的时候的同步异步。
其实同步方式很好理解, 例如你调用一个function, 当这个function执行完后, 这个方法实现的功能已经完成。这里往往会跟阻塞混淆,其实是因为你采用了同步方式执行代码, 才阻塞了你的thread或者process. 而不是因为阻塞,才叫同步。
异步方式就不提供这种保证, 当你用异步方式调用一个function的时候,这个方法会马上返回,事实上多数情况
下这种function call只是向某个任务执行体提交一个任务而已。 而你的主thread可以继续执行其他的事情, 不必等待(阻塞), 而当那个任务执行体执行完你提交的这个任务后,它会通过某种方法callback给你的thread, 告诉你,你的这个任务已经完成。
实际上,在目前的应用中, 很少有真正实现异步IO的(AIO), 听说(Windows 完成端口跟bsd kqueue实现了, 只是听说而已), 而通过select/poll等实现的不能算是AIO,只能说是个类似的或者是假冒的。。
因为用select/poll实现的情况下,他们多半都是把调用thread作为执行体thread的。
上面完全是个人理解,欢迎指正! |
|