多進程與多線程的選擇
時間:2016-12-29作者:華清遠見
上周去參加答辯,內容是安防系統,然后就想到了我們如何來實現我們的程序,是選擇進程還是線程。帶著疑惑,查了些資料,總結如下: 1、首先要明確進程和線程的含義: 進程(Process)是具有一定獨立功能的程序關于某個數據集合上的一次運行活動,是系統進行資源分配和調度的一個獨立單位。與程序相比,程序只是一組指令的有序集合,它本身沒有任何運行的含義,只是一個靜態實體。進程是程序在某個數據集上的執行,是一個動態實體。它因創建而產生,因調度而運行,因等待資源或事件而被處于等待狀態,因完成任務而被撤消,反映了一個程序在一定的數據集上運行的全部動態過程。 每個正在系統上運行的程序都是一個進程。每個進程包含一到多個線程。進程也可能是整個程序或者是部分程序的動態執行。線程是一組指令的集合,或者是程序的特殊段,它可以在程序里獨立執行。也可以把它理解為代碼運行的上下文。所以線程基本上是輕量級的進程,它負責在單個程序里執行多任務。通常由操作系統負責多個線程的調度和執行。 多線程是為了同步完成多項任務,不是為了提高運行效率,而是為了提高資源使用效率來提高系統的效率。線程是在同一時間需要完成多項任務的時候實現的。 使用線程的好處有以下幾點: a)使用線程可以把占據長時間的程序中的任務放到后臺去處理 b)用戶界面可以更加吸引人,這樣比如用戶點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度 c)程序的運行速度可能加快 d)在一些等待的任務實現上如用戶輸入、文件讀寫和網絡收發數據等,線程就比較有用了。在這種情況下我們可以釋放一些珍貴的資源如內存占用等等。 2、其次來看下線程和進程的關系 線程是屬于進程的,線程運行在進程空間內,同一進程所產生的線程共享同一內存空間,當進程退出時該進程所產生的線程都會被強制退出并清除。線程可與屬于同一進程的其它線程共享進程所擁有的全部資源,但是其本身基本上不擁有系統資源,只擁有一點在運行中必不可少的信息(如程序計數器、一組寄存器和棧)。 3、然后我們來看下線程和進程間的比較
4、設計時考慮的使用技巧 這里參照ang639在多進程和多線程設計思考中提及的原則: 1.盡量避免長駐內存的進程,例如那些很少用到的功能,或周期性很長(10分鐘以上),把它們的功能提取出來,做成一個小的應用程序。需要的時候再把它們拉起來(如通過crontab配置,或直接system)。
2.把目標設計成子功能系統的組合可用提高重用的易用性和維護性。 也就是說,我們在做設計的時候可以如下考慮: 1、線程的創建以及線程間的通信和同步都比進程要快。 在多核CPU上的任務分割是對線程而言的,不是進程。 2、如果不需要頻繁的創建和銷毀 執行的效率是并不多的,需要頻繁創建的話,線程快。 3、其它的就根據你的實際情況選擇了, 要是沒有數據通信什么的, 線程間的通信比進程間方便。關鍵的一點,多線程可以讓同一個程序的不同部分并發執行。 所以在做安防系統的時候,報警系統和監控系統之間可以用多進程來做,對于報警系統中可以用多線程來實現如果發生意外,可以向用戶發送消息,同時鳴笛,以及如果是火警的話,可以打開閥門等。
相關資訊
發表評論
|