日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

进程和线程的剖析

發(fā)布時間:2023/12/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 进程和线程的剖析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

進程和線程的區(qū)別?什么時候用進程?什么時候用線程?

答:首先得知道什么是進程什么是線程?

我的理解是進程是指在系統(tǒng)中正在運行的一個應(yīng)用程序;程序一旦運行就是進程,或者更專業(yè)化來說:進程是指程序執(zhí)行時的一個實例。

線程是進程的一個實體。

進程——資源分配的最小單位,線程——程序執(zhí)行的最小單位。

?

線程進程的區(qū)別體現(xiàn)在幾個方面:

第一:因為進程擁有獨立的堆棧空間和數(shù)據(jù)段,所以每當啟動一個新的進程必須分配給它獨立的地址空間,建立眾多的數(shù)據(jù)表來維護它的代碼段、堆棧段和數(shù)據(jù)段,這對于多進程來說十分“奢侈”,系統(tǒng)開銷比較大,而線程不一樣,線程擁有獨立的堆棧空間,但是共享數(shù)據(jù)段,它們彼此之間使用相同的地址空間,共享大部分數(shù)據(jù),比進程更節(jié)儉,開銷比較小,切換速度也比進程快,效率高,但是正由于進程之間獨立的特點,使得進程安全性比較高,也因為進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產(chǎn)生影響,而線程只是一個進程中的不同執(zhí)行路徑。一個線程死掉就等于整個進程死掉。

第二:體現(xiàn)在通信機制上面,正因為進程之間互不干擾,相互獨立,進程的通信機制相對很復(fù)雜,譬如管道,信號,消息隊列,共享內(nèi)存,套接字等通信機制,而線程由于共享數(shù)據(jù)段所以通信機制很方便。。

3.屬于同一個進程的所有線程共享該進程的所有資源,包括文件描述符。而不同過的進程相互獨立。

4.線程又稱為輕量級進程,進程有進程控制塊,線程有線程控制塊;

5.線程必定也只能屬于一個進程,而進程可以擁有多個線程而且至少擁有一個線程;

第四:體現(xiàn)在程序結(jié)構(gòu)上,舉一個簡明易懂的列子:當我們使用進程的時候,我們不自主的使用if else嵌套來判斷pid,使得程序結(jié)構(gòu)繁瑣,但是當我們使用線程的時候,基本上可以甩掉它,當然程序內(nèi)部執(zhí)行功能單元需要使用的時候還是要使用,所以線程對程序結(jié)構(gòu)的改善有很大幫助。

?

?

進程與線程的選擇取決以下幾點:

1、需要頻繁創(chuàng)建銷毀的優(yōu)先使用線程;因為對進程來說創(chuàng)建和銷毀一個進程代價是很大的。

2、線程的切換速度快,所以在需要大量計算,切換頻繁時用線程,還有耗時的操作使用線程可提高應(yīng)用程序的響應(yīng)

3、因為對CPU系統(tǒng)的效率使用上線程更占優(yōu),所以可能要發(fā)展到多機分布的用進程,多核分布用線程;

4、并行操作時使用線程,如C/S架構(gòu)的服務(wù)器端并發(fā)線程響應(yīng)用戶的請求;

5、需要更穩(wěn)定安全時,適合選擇進程;需要速度時,選擇線程更好。

進程間通信

既然每個進程是占有獨立的地址空間且不能共享數(shù)據(jù),那就需要有進程通信的方式,進程間通信(IPC)方式有以下幾種:

(1)共享內(nèi)存,獨立的開辟一段內(nèi)存空間,進程1往內(nèi)存中寫數(shù)據(jù),進程2從內(nèi)存中讀數(shù)據(jù),如果有其他進程,則另開辟內(nèi)存空間即可。

(2)消息隊列:可以傳遞消息

(3)管道:可以用來傳遞消息,但是是單向的

(4)互斥器:用來進程同步和互斥

(5)信號量:用來進程同步和互斥

(6)信號:用來進程同步和互斥

?

線程間通信

因為同一個進程中的線程是共享地址空間的,可以共享數(shù)據(jù),因此線程間的通信方式個人認為就是處理線程間的同步和互斥,常用線程間通信的方式有以下幾種:

(1)原子操作符集

(2)關(guān)鍵代碼段(Windows)

(3)互斥鎖

(4)信號量

(5)條件變量(Linux)

(6)讀寫鎖(Linux)

進程和線程不能進行直接通信。

操作:

https://www.cnblogs.com/microfan/p/5294250.html

轉(zhuǎn)載于:https://www.cnblogs.com/lgx-fighting/p/9372594.html

總結(jié)

以上是生活随笔為你收集整理的进程和线程的剖析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。