线程与进程

       不久前看《The Art Of Unix Programming》。其中有一个小节叫做"Threads —Threat or Menace?"。其中作者从Uinx的开发传统,对多线程的开发模式提出了一些批评。主要是认为多线程带来了同步,死锁,调试困难以及性能等问题。这些确实是在多线程程序中经常遇到的一些问题,有些确实很困扰。但是,其实这些都是细节,其实作者通过这些批评,主要还是为了提倡Unix下一个进程只做一件事,并且做好一件事的思想。我觉得这是一种很好很重要并且很实用的软件工程思想。


    看完这个章节不久,刚好有个开发项目,需要软件兼容不同的采集设备。对于数据采集,有两种做法。一种是针对每种设备开启一个独立线程来负责采集数据,另一种就是使用独立进程来采集数据,并使用UDP来向主程序回传采集数据。在兼容的设备数量比较多时,每个设备开启一个线程,并且进行相应的协议处理的话,这样就会导致程序规模比较庞大,而且一旦采集硬件出现一些故障,会导致主程序的崩溃,而第二种方式则不会,就算出现问题,也不会影响主程序的稳定性。此外,兼容不同设备的采集程序还可以由不同的人同时开发,提高开发效率,可以协作开发。

    当然,多进程的方式也有缺点,就是需要针对IPC定义通信协议,这个可能也会比较麻烦。线程在很多情况下也是难以避免的,当然这个可以根据软件规模来灵活选择了。但是,Unix下一个进程只做一件事的思想确实可以为windows开发所用。其实,咱们大家都用的360杀毒软件,就有很多后台进程,可见其也是采用了这种思想。


你可能感兴趣的:(多线程,windows,unix,360,杀毒软件)