想象一下,你将有很多长处理器密集型任务将某些字符串翻译成别的东西。您将希望拥有一个实际线程池,以保持主节点线程正常运行并充分利用您的内核。哪个响应属于node.js threadPool中的哪个任务?
执行此操作的主要方法是执行Threads-a-gogo或Webworker-Threads,并启动16个线程池(例如,在具有8个内核的英特尔上,通常同时有16个线程)。
对线程发出请求称为事件或消息。获得回应也会触发事件或收到消息。但是这对于threadPool是如何工作的?
如果您跳过Webworker API,TAGG和Webworkers for node具有相同的基础API。您可以使用threadPool.load
加载所有工作人员的翻译功能,并使用threadPool.any
将任务定位到其中一个工作人员。
但想象一下,我现在有50个任务(要翻译的字符串)排队。 threadPool
最终会发出50个事件(带有翻译字符串的响应),而不会告诉我该响应属于哪个任务?
我想我从根本上误解了threadPool的一件事。
有没有一种方法,我可以只添加一个任务到threadPool队列,并接收回调时特定任务完成?
这可能正是我所需要的。我接近接受这一点。我非常关注webworker API(node-webworker-threads)和'onmessage''事件,我没有对'eval'进行足够的关注;我认为这是'load'的内联变体,它也有一个cb,但是我想在加载初始函数(不执行它)时已经完成了。有没有使用Webworkers API来模拟这种行为的方法? – Redsandro 2014-09-13 14:53:42
使用Web Workers时,您只有'postMessage()',并且没有内置线程池。然而,如果你想重新使用一个工作者,你需要做的事情就是将回调与工作请求进行匹配,并将请求数据传递给某种唯一的ID,以便工作者可以通过postMessage()结果和原始ID都可以匹配回调。 – mscdex 2014-09-13 15:15:19