何时使用非阻塞I / O?

时间:2013-01-20 07:17:25

标签: node.js nonblocking

我试图了解nodejs在哪些情况下会比其专业人员更快。我完全理解术语异步I / O和非阻塞I / O,但不能想到它有用的用例。有人可以举个例子吗?

2 个答案:

答案 0 :(得分:3)

Node是异步I / O有用的一个主要例子。

节点是(就用户而言)单线程,因此等待同步I / O将停止执行代码的唯一线程。由于无法保证I / O需要多长时间,因此可能会使节点代码运行得非常慢。

这就是Node几乎只使用异步I / O的原因,它允许单个线程快速将I / O工作卸载到操作系统,同时继续执行代码而不会中断,直到操作系统通知Node I / O操作是完成。

答案 1 :(得分:0)

NodeJS基本上是基于单线程概念的服务器端编码,因此我们必须管理此线程本身的所有I / O和CPU工作。

我们知道,I / O操作是正在运行的线程的基本阻塞操作(例如:I / O操作可能包括从用户获取输入,或从数据中心读取大文件;此操作可能会挂断一段时间的线程,这可能导致挂起许多客户端请求。)

为了避免上述情况,NodeJS提出了single thread asynchronous non-blocking I/O的概念(同时克服了在多线程情况下创建多个线程的开销)。