Vimer.Me

基础·极致·分享

煮酒编码空望月,疯疯癫癫醉人生


Node.js


  1. Node.js异步回调池, Maximum call stack size exceeded error

    这种错误主要发生在js调用栈的限制,如下面递归调用的代码:

    
    (function a() {
        a();
    })();
    
    

    但是在Node.js中除了因为调用栈限制导致这种错误,还会因为异步回调的池满了导致这个问题,正常来说每个异步函数调用的回调函数,基本都是由事件触发回调的,这些事件触发器存在于一个地方,异步回调完成后,这个内存才会被回收.

    阅读全文 Node.js, 异常

  2. Node.js和cpu密集型计算

    
    setTimeout(function () {
        for (var i = 0; i < 10000000000; i++) {
            //CPU密集
        }
    }, 200);
    
    setTimeout(function () {
        console.log('210 ms...');
    }, 210);
    
    

    这个小例子很经典的解释了Node.js遇到密集型CPU的时候问题,这个程序分别在两个时间点触发,虽然在210ms得时候回调内得程序执行非常很快,但是在200ms得时候处理了一个CPU非常密集型的任务就导致整个线程阻塞了.

    阅读全文 Node.js, cpu密集型计算

  3. Node.js原子性操作MongoDB

    假设基础数据为:

    
    {
        "name" : "cb",
        "data" : 0,
    }
    
    

    有时候为了充分利用多核,会同时开启多个node进程,但是若部分代码若涉及到操作mongodb就会有下面现象.
    “理想情况下”,多个进程执行完后得数据为:

    
    {
        "name" : "cb",
        "data" : 6000,
    }
    
    

    其实不然 !

    阅读全文 MongoDB, Node.js, 原子性