찾다

 >  Q&A  >  본문

NodeJS异步机制的疑惑?

问题描述:大家都知道nodejs因为其异步编程和事件机制而被大家津津乐道,但是最近在学习nodejs时对nodejs的异步不是很理解。都说nodejs是单进程单线程的,但是它的异步处理又给人的感觉是多线程的,比如下面的例子:

var fs = require("fs");
var data = fs.readFileSync('input.txt');//同步等待执行,这必然是单线程
console.log(data.toString());
console.log("程序执行结束!");

但是,它还有异步方式是这样处理:

var fs = require("fs");
fs.readFile('input.txt', function (err, data) {//异步执行,这个地方没有等待执行结束就已经打印了"程序执行结束",然后打印data数据
    if (err) return console.error(err);
    console.log(data.toString());
});
console.log("程序执行结束!");

希望大神们帮忙解释一下,总感觉它异步是多线程方式,而nodejs确实单进程单线程的?

phpcn_u238phpcn_u2382847일 전931

모든 응답(2)나는 대답할 것이다

  • 数据分析师

    数据分析师2017-10-01 00:45:48

    NodeJS 비동기 메커니즘에 대해 혼란스러우신가요? -PHP 중국 웹사이트 Q&A-NodeJS 비동기 메커니즘에 대한 의구심이 있으신가요? -PHP 중국어 홈페이지 Q&A

    꼭 보고 배워보세요.

    회신하다
    0
  • 阿神

    阿神2017-03-10 14:06:10

    node是单线程的没错,可以把这个线程理解为主线程,当遇到异步时,会把异步的任务交给底层的线程池,只是执行js代码的是单线程而已,异步任务完成后会放进事件队列,扫描,等到主线程空闲时取出来处理。

    회신하다
    0
  • 취소회신하다