C語言:進程vs線程,如何選擇?

來源:互聯網
上載者:User

進程vs線程,如何選擇?

我們編寫程式,到底是採用多線程還是多進程?這裡是有區別的,採用不同的機制能夠獲得的效率也不一樣。如何選擇適合我們自己的程式的機制呢?下面是一些常見的選擇的看法,不過也只是提供給大家參考參考,具體設計的時候還是要自己處理。

¨ 一個程式裡面的所有的線程都在同一個Runspace中執行。而一個程式的子進程則是運行在另外的執行空間中的,這裡是通過調用了exec函數來實現的。

¨ 同一個進程中的某個線程的故障可以影響其它的線程,因為所有的線程共用同一個虛擬記憶體空間以及其他資源。例如,某個線程對沒有初始化的指標進行寫操作,就可能影響其它的線程。而一個出了問題的進程是不會影響其它的進程的,因為它們分別在不同的進程空間進行自己的操作。

¨ 建立新的進程需要進行記憶體的拷貝操作,這就額外的增加了系統負擔,而線程則不需要這個拷貝過程。不過由於現在的作業系統的實現是僅僅當記憶體需要改變的時候才拷貝改動的部分,所以這裡的影響相對還是比較小的。

¨ 線程通常用在某些需要比較好的同步操作的場合。例如,某個問題可以分解為多個幾乎對等同步處理的任務的話,則是用線程是很好的選擇。進程則適合應用在不需要嚴格的同步的場合。

¨ 線程之間共用資料是很方便的,因為不同的線程本來就是共用同樣的儲存空間。(然而這裡就要非常仔細的處理競爭的情況。)而不同進程之間共用資料則需要使用一些ipc機制,例如管道、共用記憶體、通訊端等等。

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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