V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coolicer
V2EX  ›  Node.js

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

  •  1
     
  •   coolicer · 2015 年 9 月 28 日 · 5028 次点击
    这是一个创建于 3772 天前的主题,其中的信息可能已经有所发展或是发生改变。
    跑好之后,再丢给队列吗?
    11 条回复    2015-09-30 23:35:02 +08:00
    jswh
        1
    jswh  
       2015 年 9 月 28 日
    单线程
    coolicer
        2
    coolicer  
    OP
       2015 年 9 月 28 日
    @jswh 哭了

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