你会如何解释一个简单的凡人关于阻止IO和非阻塞IO?我发现这些概念在我们很多程序员中都不是很清楚。什么是简单的话阻止IO和非阻塞IO?
9
A
回答
9
阻塞I/O意味着程序执行在I/O进行时处于暂停状态。所以程序一直等到I/O完成,然后继续执行。 在非阻塞I/O中,程序可以在I/O操作期间继续。
0
只是说..非阻塞I/O(异步)允许进行其他操作,同时完成其东西和阻塞I/O会阻止其他操作
4
这是一个并发性问题。在正常情况下,在OS内核从用户程序接收到I/O操作后,该程序不会再次运行,直到I/O操作完成。其他计划通常在此期间安排。
这解决了很多小问题。例如,程序如何知道有多少字节被读取,除非I/O在read(2)
返回时完成?如何在write(2)
返回时仍在进行操作的情况下如何重用write(2)
缓冲区?显然,真正的异步I/O需要更复杂的接口。
最终可以归结为:
- I/O方面同步发生的程序,直到I/O完成
- I/O仅仅是通过系统调用计划阻止该程序,并且存在一些通知机制来传达实际结果
- 如果I/O操作无法立即完成,那么I/O操作只会失败。在实践中,这是“非阻塞”I/O更常见的用法。
整个问题由工作调度多线程程序时,I/O可以想见阻止只有一个线程而且复杂,但是这是一个不同的问题...
相关问题
- 1. IOCP和非阻塞IO
- 2. 非阻塞IO和HystrixObservableCommand
- 3. 阻止IO与非阻塞IO;寻找好的文章
- 4. .net非阻塞IO pre 4.5
- 5. 非阻塞套接字和io
- 6. 使用Ruby的非阻塞IO?
- 7. 了解节点中的非阻塞IO
- 8. Winsock的非阻塞IO重叠仍块
- 9. 的Java非阻塞IO CPU泄漏
- 10. 适用于Android的非阻塞IO
- 11. 如何将Scala中的阻塞IO封装为非阻塞
- 12. Python中的阻塞与非阻塞网络IO
- 13. 我的(初学者)对阻塞和非阻塞io的理解是否正确?
- 14. 带阻塞IO的SSLEngine
- 15. 非阻塞IO哈斯克尔
- 16. Undertow如何做非阻塞IO?
- 17. 非阻塞IO Java中与逻辑
- 18. 非阻塞IO如何实现?
- 19. 在Akka阻止IO
- 20. 为什么在另一个线程中阻塞的IO阻止CreateWindowEx()返回
- 21. Scala中的非阻塞和阻塞未来是什么?
- 22. 比较和对比Node.js和Servlets 3.1非阻塞IO
- 23. 非阻塞红宝石MRI IO和EventMachine的
- 24. 在nodejs中阻止IO
- 25. 阻止IO/Ruby on Rails
- 26. Python的线程阻塞IO操作
- 27. Netty是否只为网络提供非阻塞IO?
- 28. Unity3d是否支持非阻塞网络IO?
- 29. 在闪存中是否存在非阻塞io?
- 30. Filewatcher是否在Java中考虑了非阻塞IO?
...并通过该通知IO操作完成时回调。这迫使你以不同的方式设计你的程序,但会使它们表现得更好。 – 2009-09-26 08:05:58
@ Lex,阻塞和非阻塞操作的任何示例?谢谢。 – Kalanidhi 2014-01-08 07:15:19
@etc_passwd在JS中很容易理解;对alert();'的调用是阻塞的,因为执行被搁置,直到用户点击OK。 AJAX调用是非阻塞的,在发送HTTP请求时继续执行。 – 2014-01-08 09:31:24