我已经开始修改Node.js HTTP服务器,并且真的很想编写服务器端Javascript,但是有些事情使我无法开始在Web应用程序中使用Node.js。
我了解整个异步I / O概念,但我对程序代码占用大量CPU资源的极端情况(如图像处理或对大型数据集进行排序)感到有些担忧。
据我了解,对于简单的网页请求(例如查看用户列表或查看博客帖子),服务器将非常快。但是,如果我想编写非常占用CPU的代码(例如在管理后端),以生成图形或调整成千上万张图像的大小,则请求将非常缓慢(几秒钟)。由于此代码不是异步的,因此在那几秒钟内到达服务器的每个请求都将被阻止,直到我的慢请求完成为止。
一种建议是使用Web Workers执行CPU密集型任务。但是,恐怕网络工作者会很难编写干净的代码,因为它可以通过包含一个单独的JS文件来工作。如果CPU密集型代码位于对象的方法中怎么办?为每个CPU密集型方法编写JS文件实在是太糟了。
另一个建议是产生一个子进程,但这会使代码的可维护性降低。
有什么建议可以克服这个(公认的)障碍?在确保CPU重任务异步执行的同时,如何使用Node.js编写干净的面向对象的代码?
使用
child_process
是一种解决方案。但是与Go相比,产生的每个子进程可能会消耗大量内存goroutines
您还可以使用基于队列的解决方案,例如kue