Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 哪个响应属于node.js线程池中的哪个任务?_Multithreading_Node.js_Callback_Threadpool_Web Worker - Fatal编程技术网

Multithreading 哪个响应属于node.js线程池中的哪个任务?

Multithreading 哪个响应属于node.js线程池中的哪个任务?,multithreading,node.js,callback,threadpool,web-worker,Multithreading,Node.js,Callback,Threadpool,Web Worker,想象一下,您将要执行大量长时间的处理器密集型任务,将一些字符串转换为其他字符串。您需要有一个实际的线程池,以保持主节点线程运行并利用核心 实现这一点的主要方法是实现或,并启动一个包含16个线程的池(例如,在具有8个内核的Intel上,通常同时有16个线程) 对线程执行请求称为事件或消息。获取响应也就是捕获事件或获取消息。但这在线程池中是如何工作的呢 如果跳过Webworker API,则节点的TAGG和Webworkers具有相同的底层API。您可以使用threadPool在所有worker中加

想象一下,您将要执行大量长时间的处理器密集型任务,将一些字符串转换为其他字符串。您需要有一个实际的线程池,以保持主节点线程运行并利用核心

实现这一点的主要方法是实现或,并启动一个包含16个线程的池(例如,在具有8个内核的Intel上,通常同时有16个线程)

对线程执行请求称为事件或消息。获取响应也就是捕获事件或获取消息。但这在线程池中是如何工作的呢

如果跳过Webworker API,则节点的TAGG和Webworkers具有相同的底层API。您可以使用
threadPool在所有worker中加载翻译函数。加载
并使用
threadPool.any
向其中一个worker添加任务

但假设我现在有50个任务(要翻译的字符串)要排队。
threadPool
最终将发出50个事件(带有翻译字符串的响应),而不告诉我响应属于哪个任务

我想我基本上误解了关于线程池的一件事


是否有一种方法可以将任务添加到线程池队列中,并在特定任务完成时接收回调?

如果可以返回转换后的字符串,为什么要从线程池发出事件?代码返回的值由传递到
threadpool.any.eval()
的回调接收。例如:

threadPool.any.eval('return "hello world"', function(err, data) {
  // data === 'hello world'
});

这可能正是我需要的。我几乎接受了这一点。我太专注于webworker API(节点webworker线程)和
onmessage
事件
,以至于我没有对
eval
给予足够的关注;我认为它是
load
的一个内联变量,它也有一个cb,但我考虑了加载初始函数(不执行它)的时间。有没有一种方法可以使用Webworkers API模拟这种行为?对于Webworkers,您只有
postMessage()
,并且没有内置的线程池。但是,如果您想重用一个worker,那么要将回调与工作请求匹配起来,您需要做的是将某种唯一的id与请求数据一起传递,这样worker就可以
postMessage()
同时使用结果和原始id,这样您就可以匹配回调。