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

2015-09-28 17:25:48 +08:00
 coolicer
跑好之后,再丢给队列吗?
4600 次点击
所在节点    Node.js
11 条回复
jswh
2015-09-28 17:26:54 +08:00
单线程
coolicer
2015-09-28 17:28:31 +08:00
@jswh 哭了

看来我还是不懂 node
int64ago
2015-09-28 17:29:06 +08:00
底层是多线程的,只是在 JavaScript 这一层才是单线程的
jswh
2015-09-28 17:29:38 +08:00
http://blog.getify.com/promises-part-1/这系列文章的第一部分解释了 js 引擎单线程并发的原理,讲得挺清楚的
wuliao49
2015-09-28 17:56:03 +08:00
3 楼是对的。不分青红皂白的说 NODE 就是单线程的朋友进误区了
joyee
2015-09-28 18:03:12 +08:00
Node.js 里 JavaScript 代码的执行是单线程的,但是在底层无论是 V8 还是 libuv 都不是,比如 V8 是一个线程做编译执行一个线程做优化几个线程负责 GC 还有线程负责 profiling 找 JIT 目标, libuv 有线程池配合 epoll 之类做 I/O 多路复用,还有其他部分也是……
jswh
2015-09-28 18:15:07 +08:00
@wuliao49
@joyee
楼主问得是事件循环。可能我理解错了,我想说的只是 node 的并发并不是并行。
joyee
2015-09-28 20:18:30 +08:00
@jswh JavaScript 本身跟事件循环没太大关系的,你在 ECMAScript 的 spec 里是看不到相关的东西的,同理你在 V8 里也找不到类似什么 setTimeout 之类的东西……浏览器里的事件循环属于 BOM , Node 里的事件循环是包装了 libuv 而已, libuv 是有线程池的
lcj2class
2015-09-29 22:53:22 +08:00
we
2015-09-30 20:07:16 +08:00
darluc
2015-09-30 23:35:02 +08:00
9 楼的图不错哦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/224299

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX