想象一下,您将需要执行大量处理器密集型任务,将某些字符串转换为其他字符串。您将希望拥有一个实际线程池来保持主节点线程的运行并利用您的内核。
执行此操作的主要方法是实现Threads-a-gogo或Webworker-Threads,并启动16个线程池(例如,在具有8个内核的Intel上,您通常同时拥有16个线程)。
对线程执行请求称为事件或消息。获得回复也是抓住事件或收到消息。但是这如何与threadPool一起工作?
如果跳过Webworker API,TAGG和Webworkers for node具有相同的底层API。您可以使用threadPool.load
在所有工作人员中加载翻译功能,并使用threadPool.any
将任务排到其中一个。
但是想象一下,我现在要排队50个任务(要翻译的字符串)。 threadPool
最终将发出50个事件(带有翻译字符串的响应)而不告诉我响应属于哪个任务?
我认为我从根本上误解了关于threadPool的一件事。
有没有办法可以在threadPool队列中添加一个任务,并在特定任务完成后收到回调?
答案 0 :(得分:1)
为什么只能返回已翻译的字符串,从线程池中发出事件?代码返回的值由传递给threadpool.any.eval()
的回调接收。例如:
threadPool.any.eval('return "hello world"', function(err, data) {
// data === 'hello world'
});