我有一个需要同时处理10-12个请求的大量数据处理操作。我了解到,为了实现更高水平的并发性,Node.js是一个不错的平台,它通过非阻塞事件循环来实现。
我知道,如果要查询数据库等操作,可以将事件分离到单独的进程(例如 mongod
、mysqld
),然后使用回调函数处理该进程的结果,这个方法也很好理解。
但是,如果我想在回调函数中执行繁重的计算任务,那么它会阻塞其他请求,直到该回调函数中的代码全部执行完毕。例如,我想处理一张高分辨率的图像,而我的代码是JavaScript本身编写的(没有单独的进程来处理图像)。
我认为实现的方式是:
get_image_from_db(image_id, callback(imageBitMap) {
heavy_operation(imageBitMap); // Can take 5 seconds.
});
那个 heavy_operation
会导致节点在那 5 秒内无法接收任何请求吗?或者我想错了做这样的任务的方式。请指导,我是JS新手。
更新
或者可以这样,我可以处理部分图片并使事件循环返回以处理其他回调,并返回处理该部分图片(类似于优先处理事件)。