相关疑难解决方法(0)

为什么Node.js是单线程的?

在基于PHP(或Java/ASP.NET/Ruby)的Web服务器中,每个客户端请求都在新线程上实例化.但是在Node.js中,所有客户端都运行在同一个线程上(它们甚至可以共享相同的变量!)我知道I/O操作是基于事件的,所以它们不会阻塞主线程循环.

我不明白的是为什么Node的作者选择它是单线程的?这让事情变得困难.例如,我无法运行CPU密集型功能,因为它阻塞了主线程(并阻止了新的客户端请求),因此我需要生成一个进程(这意味着我需要创建一个单独的JavaScript文件并在其上执行另一个节点进程) ).但是在PHP中,cpu密集型任务不会阻止其他客户端,因为我提到每个客户端都在不同的线程上.与多线程Web服务器相比,它有哪些优势?

注意:我已经使用群集来解决这个问题,但它并不漂亮.

node.js

240
推荐指数
3
解决办法
11万
查看次数

如何在nodejs中创建线程

有没有办法创建一次运行多个方法的线程.如果任何方法失败,则应该杀死所有其他线程.
提前致谢

parallel-processing multithreading asynchronous node.js

87
推荐指数
6
解决办法
13万
查看次数

Node.js C++插件:线程

我正在为Node.js(wxWidgets)编写一个GUI插件,我想在自己的线程中运行GUI循环,因为我不认为将它与Node的主线程和事件循环合并是个好主意.

但是我不确定如何创建新线程.我把它运行了uv_queue_work().但它不会为GUI创建独占线程,而是使用Node的线程池.这可能是一个坏主意,因为工作人员将在整个运行时期间停留.(不确定这个)

我也可以使用wxWidgets' wxThread,也可以.我uv_thread_create在libuv git master中找到了一个新功能.不知道如何使用它,因为没有描述,除了它还没有在Node.js稳定版本中可用.

我的问题:如果有的话,创建多线程Node.js插件的"标准"方法是什么?我查看了其他项目,但只能使用libuv找到短时间运行的工作线程.

c++ node.js

11
推荐指数
1
解决办法
7001
查看次数

Node.js C++插件:来自不同线程的多个回调

我正在创建一个节点C++插件,它应该回调一个js函数,因为事件是由一些不受我控制的其他线程触发的(它实际上是我使用的托管dll的.net线程).由于JS世界是单线程的,我不能只保留js函数引用并从非js线程调用它.我甚至无法创建我想传递给该线程上的回调函数的参数.

我已经看到uv_queue_work在你希望从js线程移动工作并且一旦完成并且从js线程回调以执行你需要做的任何事情的情况下使用,例如回调一个js函数.

供以后参考,这是函数的签名:

int uv_queue_work(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb,
uv_after_work_cb after_work_cb);
Run Code Online (Sandbox Code Playgroud)

调用uv_queue_work对于一次性工作来说很好,而且我可能会通过链接uv_queue_work来自from的调用来任意调用我after_work_cb,同时work_cb与其他线程同步,但我想知道是否有更简单的方法来执行它.

就像node.js提供的fn一样,可以被任何其他线程直接调用,其中fn指针指向下一次在主js线程上执行的代码.任何的想法?

multithreading node.js

5
推荐指数
1
解决办法
3757
查看次数