線程與進程

       不久前看《The Art Of Unix Programming》。其中有一個小節叫做"Threads —Threat or Menace?"。其中作者從Uinx的開發傳統,對多線程的開發模式提出了一些批評。主要是認爲多線程帶來了同步,死鎖,調試困難以及性能等問題。這些確實是在多線程程序中經常遇到的一些問題,有些確實很困擾。但是,其實這些都是細節,其實作者通過這些批評,主要還是爲了提倡Unix下一個進程只做一件事,並且做好一件事的思想。我覺得這是一種很好很重要並且很實用的軟件工程思想。


    看完這個章節不久,剛好有個開發項目,需要軟件兼容不同的採集設備。對於數據採集,有兩種做法。一種是針對每種設備開啓一個獨立線程來負責採集數據,另一種就是使用獨立進程來採集數據,並使用UDP來向主程序回傳採集數據。在兼容的設備數量比較多時,每個設備開啓一個線程,並且進行相應的協議處理的話,這樣就會導致程序規模比較龐大,而且一旦採集硬件出現一些故障,會導致主程序的崩潰,而第二種方式則不會,就算出現問題,也不會影響主程序的穩定性。此外,兼容不同設備的採集程序還可以由不同的人同時開發,提高開發效率,可以協作開發。

    當然,多進程的方式也有缺點,就是需要針對IPC定義通信協議,這個可能也會比較麻煩。線程在很多情況下也是難以避免的,當然這個可以根據軟件規模來靈活選擇了。但是,Unix下一個進程只做一件事的思想確實可以爲windows開發所用。其實,咱們大家都用的360殺毒軟件,就有很多後臺進程,可見其也是採用了這種思想。


發佈了27 篇原創文章 · 獲贊 6 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章