我有一个繁重的数据处理操作,需要按照10-12的simulatenous请求完成。我已经阅读了更高级别的并发性Node.js是一个很好的平台,它通过一个非阻塞事件循环来实现它。我知道,对于像查询数据库这样的事情,我可以产生一个事件到一个单独的进程(如mongod
,mysqld
),然后有一个回调来处理该进程的结果。很公平。如何在node.js中完成繁重的处理操作
但是如果我想要在回调中完成大量计算,该怎么办。它会阻止其他请求,直到该回调中的代码完全执行。例如,我想处理一个高分辨率的图像和代码,我已经在Javascript本身(no separate
进程做图像处理)。
我想实现的方式是像
get_image_from_db(image_id, callback(imageBitMap) {
heavy_operation(imageBitMap); // Can take 5 seconds.
});
将采取在这5秒中的任何请求heavy_operation
停止节点。或者我正在考虑错误的方式来完成这样的任务。请指导,我是JS新手。
UPDATE
或者也可以像我可以处理局部图像,使事件循环回去采取其他回调并返回到处理该部分图像。 (比如优先事件)。
但是,如果我有单独的进程为重操作,如果我说的有15个请求进来,会不会它创建15道工序。这将是非常昂贵的。我不喜欢在节点中创建线程。谢谢你的回答。我会接受它,一旦我得到我的怀疑清除:) – 2013-03-10 00:51:04
也检查我的问题中的更新。 – 2013-03-10 00:51:51
是的,它会创建15个进程,并且据我所知,你不能在Node中创建线程。它有一个线程,这是您的主要事件循环。另一个选择是编写一个单独的Node Worker应用程序,它的任务图像处理通过消息队列(RabbitMQ或其他)传递给它。然而,这只会同步处理图像(一次一个)。如果你想让它们同时处理,你将不得不创建独立的进程。 – 2013-03-10 00:59:26