coolicer
V2EX  ›  Node.js

node.js 的事件循环,是多线程?

  •  1
     
  •   coolicer · Sep 28, 2015 · 5186 views
    This topic created in 3883 days ago, the information mentioned may be changed or developed.
    跑好之后,再丢给队列吗?
    11 replies    2015-09-30 23:35:02 +08:00
    jswh
        1
    jswh  
       Sep 28, 2015
    单线程
    coolicer
        2
    coolicer  
    OP
       Sep 28, 2015
    @jswh 哭了

    看来我还是不懂 node
    int64ago
        3
    int64ago  
       Sep 28, 2015
    底层是多线程的,只是在 JavaScript 这一层才是单线程的
    jswh
        4
    jswh  
       Sep 28, 2015
    http://blog.getify.com/promises-part-1/这系列文章的第一部分解释了 js 引擎单线程并发的原理,讲得挺清楚的
    wuliao49
        5
    wuliao49  
       Sep 28, 2015
    3 楼是对的。不分青红皂白的说 NODE 就是单线程的朋友进误区了
    joyee
        6
    joyee  
       Sep 28, 2015
    Node.js 里 JavaScript 代码的执行是单线程的,但是在底层无论是 V8 还是 libuv 都不是,比如 V8 是一个线程做编译执行一个线程做优化几个线程负责 GC 还有线程负责 profiling 找 JIT 目标, libuv 有线程池配合 epoll 之类做 I/O 多路复用,还有其他部分也是……
    jswh
        7
    jswh  
       Sep 28, 2015
    @wuliao49
    @joyee
    楼主问得是事件循环。可能我理解错了,我想说的只是 node 的并发并不是并行。
    joyee
        8
    joyee  
       Sep 28, 2015
    @jswh JavaScript 本身跟事件循环没太大关系的,你在 ECMAScript 的 spec 里是看不到相关的东西的,同理你在 V8 里也找不到类似什么 setTimeout 之类的东西……浏览器里的事件循环属于 BOM , Node 里的事件循环是包装了 libuv 而已, libuv 是有线程池的
    lcj2class
        9
    lcj2class  
       Sep 29, 2015
    we
        10
    we  
       Sep 30, 2015
    darluc
        11
    darluc  
       Sep 30, 2015
    9 楼的图不错哦
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2860 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 12:23 · PVG 20:23 · LAX 05:23 · JFK 08:23
    ♥ Do have faith in what you're doing.