码迷,mamicode.com
首页 > 其他好文 > 详细

4,异步编程

时间:2016-08-11 00:47:41      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

今天主要了解Node的异步编程思想。
Node的异步编程,主要依托于回调来实现;但是这不意味着使用了回调程序就异步了
举例:
function heavyCompute(n, callback) {
    var count = 0,
        i, j;

    for (i = n; i > 0; --i) {
        for (j = n; j > 0; --j) {
            count += 1;
        }
    }

    callback(count);
}

heavyCompute(10000, function (count) {
    console.log(count);
});

console.log(‘hello‘);

-- Console ------------------------------
100000000
hello
可以看到,以上代码中的回调函数仍然先于后续代码执行。JS本身是单线程运行的,不可能在一段代码还未结束运行时去运行别的代码,因此也就不存在异步执行的概念。
但是,如果某个函数做的事情是创建一个别的线程或进程,并与JS主线程并行地做一些事情,并在事情做完后通知JS主线程,那情况又不一样了。
比如:
setTimeout(function () {
    console.log(‘world‘);
}, 1000);

console.log(‘hello‘);

-- Console ------------------------------
hello
world
 
这次可以看到,回调函数后于后续代码执行了。如同上边所说,JS本身是单线程的,无法异步执行,因此我们可以认为setTimeout这类JS规范之外的由运行环境提供的特殊函数做的事情是创建一个平行线程后立即返回,让JS主进程可以接着执行后续代码,并在收到平行进程的通知后再执行回调函数。除了setTimeoutsetInterval这些常见的,这类函数还包括NodeJS提供的诸如fs.readFile之类的异步API。
另外,我们仍然回到JS是单线程运行的这个事实上,这决定了JS在执行完一段代码之前无法执行包括回调函数在内的别的代码。也就是说,即使平行线程完成工作了,通知JS主线程执行回调函数了,回调函数也要等到JS主线程空闲时才能开始执行。
 
 参考:http://nqdeng.github.io/7-days-nodejs/#1.1

4,异步编程

标签:

原文地址:http://www.cnblogs.com/new-dream-new-hope/p/5759166.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!