关于node.js 同步,异步问题
发布于 12 年前 作者 ayymbirst 6592 次浏览 最后一次编辑是 8 年前

node.js 的c++ 扩展部份代码是异步执行的么?如果不是,如何创建自定义的异步代码。 比如,用户可选择该部份代码是同步执行,还是异步。

6 回复

可异步可同步。google关键词node.js extension c++就能找不到不少介绍 https://www.cloudkick.com/blog/2010/aug/23/writing-nodejs-native-extensions/ 这篇是我看过的不错的入门介绍,里面有一段Hello World with Asynchronous IO,应该是楼主要找的。

这篇比较早了,2010年的,现在node使用libuv作为跨平台的异步库了,github和api地址在这里,楼主可以去看看 https://github.com/joyent/libuv

我的理解:异步I/O就是靠epoll/kqueue(*nix)或IOCP(windows),本质是系统内核级别的线程池,异步计算也是要靠多线程,libuv内部就有一个线程池,你可以将任务扔给这些线程去做,总之异步是离不了多线程的,而node.js的所谓单线程仅指执行javascript的线程,底层还有其它线程的配合。不知道对不对?

底层应该没有其它线程配合吧,它本身是事件驱动和单进程的上下文,并发的越多,事件注册的越多,当并发到一定数量nodejs就会挂,说明单进程满了,没法再注册回调事件了;当然,一般的小应用不会有什么问题的,大的话我计划做nodejs链,还没想好,大的思路是做多个node服务器串起来,不知行不行~

底层应该是有多线程的,你可以去看下libuv的源码。。。 小应用到大应用就是伸缩性的问题:垂直伸缩或水平伸缩,多个node服务器串起来指的是业务分层吗?个人感觉node.js一般用来做I/O密集应用,这种情况一般是水平伸缩,也就是分布式。

对,除了javascript 代码,其它的都是多线程在做。

回到顶部