非阻塞(事件驱动的I/O)与阻塞I/O.

A_V*_*Var 6 io events nonblocking blocking node.js

最近我偶然发现了这个名为nodeJS的漂亮JS库,它就像服务器端JS一样.

该语言的主要特性是Evented I/O,它使I/O的固有容量完全无阻塞,使用回调!

我的问题是,如果过去存在这种完全无阻塞的I/O机制(给定事件驱动的I/O已经存在了很长时间),为什么它们在C#等高级语言中更受欢迎? Java(虽然Java具有支持非阻塞I/O的NIO实现)?

目前,简单的文件读/写操作会导致完整的I/O阻塞,而事件驱动的I/O则不然.

我想更好地理解事件驱动的I/O以及它与Java中的不同之处.

Kir*_*oll 5

Java:http://en.wikipedia.org/wiki/New_I/O

用于编写可伸缩服务器的多路复用,非阻塞I/O工具

.NET:http://msdn.microsoft.com/en-us/library/dxkwh6zw.aspx

public IAsyncResult BeginReceive(
    byte[] buffer,
    int offset,
    int size,
    SocketFlags socketFlags,
    AsyncCallback callback,
    Object state
)
Run Code Online (Sandbox Code Playgroud)

  • @A_Var:事件驱动的引擎实际上只是状态机的抽象.在没有内置事件驱动引擎的语言中,大多数开发人员只需使用while循环和switch语句(或调度表)编写自己的状态机.有时候,开发人员可能会费心去概括他们的状态机实现,从而生成一个API,从而产生一个事件驱动的语言库.这方面的一个例子是Python的Twisted框架. (3认同)