Node.JS教程26:强大的工作池。收藏吧!你一定会用的到
在实际项目中,如果遇到需要大计算量的操作,按需fork(分叉)其实不是一个好的选择。
因为fork的子进程也是V8(NodeJS的核心引擎)的新实例,每创建一个新实例,需要约30毫秒启动时间,和至少10MB的初始内存。
也就是说,创建进程是有代价的,你不能创建太多,也不能频繁创建。那样,达不到提高进程效率的目的。
那么,该如何高效优雅的使用子进程呢?工作池!
工作池!
合理的办法是创建一个可用的工作池,在池中存放足够多的进程,并可以随时分配使用。
我们对上一节讲的内容进行升级:当父进程发送一个任务给子进程时,子进程执行任务。并将结果向主进程反馈。
在父进程中,需要的代码会是这样的:
嗯...这样讲有些凌乱,这一章比较复杂,最好的办法,还是写一个完整的代码,做为例子:
1、father.js,主进程
当有客端访问时,触发runjob,开始启行工作。
2、worker.js
收到father主进程发来的消息时,使用process.send()方法调用子进程,向工作池发出工作任务。
3、pool.js(工作池)
接收worker消息,用工作池完成操作,并反馈给主程序。
代码中做了详细的注释 ,就不单独对代码做解析了:
执行效果
图中展示的是工作流程,可见此种方法可以达到我们的预期,工作池很OK。
对于实际编程中遇到的消耗比较大的情况,使用此种方法可以极大的提高效率,且本文已经将工作池写成了模块(pooler.js)
建议收藏,nodejs开发,在某个时候一定会遇到适合的场景的。