多進程與多線程的選擇

來源:互聯網
上載者:User

作者:王姍姍,華清遠見嵌入式學院講師。

 上周去參加答辯,內容是安防系統,然後就想到了我們如何來實現我們的程式,是選擇進程還是線程。帶著疑惑,查了些資料,總結如下:

1、首先要明確進程和線程的含義:

進程(Process)是具有一定獨立功能的程式關於某個資料集合上的一次運行活動,是系統進行資源分派和調度的一個獨立單位。與程式相比,程式只是一組指令的有序集合,它本身沒有任何啟動並執行含義,只是一個靜態實體。進程是程式在某個資料集上的執行,是一個動態實體。它因建立而產生,因調度而運行,因等待資源或事件而被處於等待狀態,因完成任務而被撤消,反映了一個程式在一定的資料集上啟動並執行全部動態過程。

每個正在系統上啟動並執行程式都是一個進程。每個進程包含一到多個線程。進程也可能是整個程式或者是部分程式的動態執行。線程是一組指令的集合,或者是程式的特殊段,它可以在程式裡獨立執行。也可以把它理解為代碼啟動並執行上下文。所以線程基本上是輕量級的進程,它負責在單個程式裡執行多任務。通常由作業系統負責多個線程的調度和執行。

多線程是為了同步完成多項任務,不是為了提高運行效率,而是為了提高資源使用效率來提高系統的效率。線程是在同一時間需要完成多項任務的時候實現的。

使用線程的好處有以下幾點:

a)使用線程可以把佔據長時間的程式中的任務放到後台去處理

b)使用者介面可以更加吸引人,這樣比如使用者點擊了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度

c)程式的運行速度可能加快

d)在一些等待的任務實現上如使用者輸入、檔案讀寫和網路收發資料等,線程就比較有用了。在這種情況下我們可以釋放一些珍貴的資源如記憶體佔用等等。

2、其次來看下線程和進程的關係

線程是屬於進程的,線程運行在進程空間內,同一進程所產生的線程共用同一記憶體空間,當進程退出時該進程所產生的線程都會被強制退出並清除。線程可與屬於同一進程的其它線程共用進程所擁有的全部資源,但是其本身基本上不擁有系統資源,只擁有一點在運行中必不可少的資訊(如程式計數器、一組寄存器和棧)。

3、然後我們來看下線程和進程間的比較

 

4、設計時考慮的提示

這裡參照ang639在多進程和多線程設計思考中提及的原則:

1.盡量避免長駐記憶體的進程,例如那些很少用到的功能,或周期性很長(10分鐘以上),把它們的功能提取出來,做成一個小的應用程式。需要的時候再把它們拉起來(如通過crontab配置,或直接system)。

2.把目標設計成子功能系統的組合可用提高重用的易用性和維護性。
把目標根據功能劃分不同的子系統,子系統間遵循特定的協議(文本或XML),由通訊聯絡起來,協作完成目標。

也就是說,我們在做設計的時候可以如下考慮:

1、線程的建立以及線程間的通訊和同步都比進程要快。 在多核CPU上的任務分割是對線程而言的,不是進程。

2、如果不需要頻繁的建立和銷毀 執行的效率是並不多的,需要頻繁建立的話,線程快。

3、其它的就根據你的實際情況選擇了, 要是沒有資料通訊什麼的, 線程間的通訊比進程間方便。最關鍵的一點,多線程可以讓同一個程式的不同部分並發執行。

所以在做安防系統的時候,警示系統和監控系統之間可以用多進程來做,對於警示系統中可以用多線程來實現如果發生意外,可以向使用者發送訊息,同時鳴笛,以及如果是火警的話,可以開啟閥門等。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.