多进程设计在传统的java程序员是一个非常陌生的名词,因为一般来说java程序都是主要启动一个java.exe而不会启动太多的进程。单java遇到异步的程序设计要求的时候,通常考虑的是多线程的设计。但是多线程设计会造成系统不稳定的主要原因。
在我曾经的参与的一个项目中,他们开发第一版系统的时候就已经把工作做完,但是系统每次一部署时候,系统通常跑不过3天。tomcat都会造成内存溢出而死掉。这个系统内存不稳定情况在整个团队找了一个月时候也总于找到原因。最终我们在系统一个模块找到一个调用xml生成图片的类,发现这个功能造成内存溢出,jvm无法很好回收这个模块的内存。因为系统的需求是每3分钟分析10几个xml生成图片。面对这么情况一时间团队无计可施,所有办法都只是可以解决一时权宜之计。
后来就提出了多进程代替多线程绘图的方案。用独立的进程获取指定的xml的数据来绘图,并且把绘图的结果返回指定位置。那么就可以大大减轻tomcat的内存负载,利用系统的内存控制。
经过总结,我觉得多进程的设计应该用于一下几个方向:
(1)大数据量的绘图;
(2)复杂的持久的算法分析;
(3)大数据量的算法压缩;
(4)大数据量的数据分析;
(5)独立的传输通道;
多进程的使用要面对问题也会很多,总结一下有一下几点:
(1)多进程的启动(jar、exe、class、bat);
(2)多进程的关闭;
(3)进程在运行过程中的数据动态交流;
(4)进程的数据同步,进程锁和进程信号量;
(5)进程加入服务后的动态交互;
(6)跨域后的进程的交互;
多进程的设计的流程图(暂时已完成的功能):
进程池的svn地址:
MultiProcess进程池的设计(二)Jar进程启动和关闭 http://blog.csdn.net/arjick/article/details/7011490
MultiProcess进程池的设计(三)主进程和子进程间的通信 http://blog.csdn.net/arjick/article/details/7022212