自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

進程與線程,你了解多少?

開發(fā) 前端
在面試中經(jīng)常會被問到進程與線程,或者實際開發(fā)中經(jīng)常遇到。那什么是進程?什么是線程?你對他們了解有多少?

進程與線程,在面試中經(jīng)常會被問到,或者實際開發(fā)中經(jīng)常遇到。那什么是進程?什么是線程?你對他們了解有多少?

我們經(jīng)常會說:

1、一個在內(nèi)存中運行的應(yīng)用程序。每個進程都有自己獨立的一塊內(nèi)存空間,一個進程可以有多個線程。

2、進程是資源分配的獨立單位,線程是資源調(diào)度的獨立單位。

進程。下圖顯示了 4 個程序創(chuàng)建了 4 個進程,這 4 個進程可以并發(fā)地執(zhí)行。

圖片

線程。QQ 和瀏覽器是兩個進程,瀏覽器進程里面有很多線程,例如 HTTP 請求線程、事件響應(yīng)線程、渲染線程等等,線程的并發(fā)執(zhí)行使得在瀏覽器中點擊一個新鏈接從而發(fā)起 HTTP 請求時,瀏覽器還可以響應(yīng)用戶的其它事件。

如果僅僅回答到這里,可能一個大學(xué)畢業(yè)生就能這么回答,那我們是不是需要深入一下,再深入一下。

比如說:

1、資源開銷方面。線程和進程的切換的資源開銷情況怎么樣?

2、內(nèi)存分配方面。進程/線程的內(nèi)存分配情況怎么樣?

3、影響程度方面。進程/線程奔潰會造成什么樣的影響?

4、執(zhí)行過程方面。進程/線程執(zhí)行過程是什么樣的?

5、我們沒有說進程之間是否可以通信?線程之間是否可以通信?如何可以通信的話,他們是怎么進行通信的?

6、進程同步又是什么?

一、資源開銷

(1)每一個進程都有獨立的代碼和內(nèi)存空間,多個進程相互切換會消耗比較大的資源。

進程切換如下圖:

圖片

說明:

  • 就緒狀態(tài)(ready):等待被調(diào)度
  • 運行狀態(tài)(running)
  • 阻塞狀態(tài)(waiting):等待資源

如果再往下說的話需要聊聊進程調(diào)度算法,比如:先來先服務(wù)(FCFS),短作業(yè)優(yōu)先(SJF),最短剩余時間優(yōu)先,時間片輪轉(zhuǎn),優(yōu)先級調(diào)度,多級反饋隊列等等。

(2)同一類線程共享代碼和內(nèi)存空間,每一個線程都有獨立的運行棧和程序計數(shù)器,多個線程相互切換消耗比較小。

二、內(nèi)存分配

(1)進程之間的地址空間和資源是相互獨立的。

(2)同一進程的線程共享本進程的地址空間和資源。

三、影響程度

(1)進程一旦奔潰,只會影響到該進程的程序奔潰,其他進程不受影響。

(2)線程一旦奔潰,會影響到使用該線程的進程都會受到影響。

(3)進程要比線程要健壯。

四、執(zhí)行過程

(1)每一個進程都有獨立的運行入口,執(zhí)行順序,程序的出口,提供線程控制,進程可以并發(fā)執(zhí)行。

(2)線程不能單獨運行,必須依賴于進程中執(zhí)行。線程可以并發(fā)執(zhí)行。

五、進程之間的通信

(1)管道(PIPE)

有名管道:一種半雙工的通信方式,它允許無親緣關(guān)系進程間的通信。

優(yōu)點:可以實現(xiàn)任意關(guān)系的進程間的通信

缺點:

  1. 長期存于系統(tǒng)中,使用不當(dāng)容易出錯。
  2. 緩沖區(qū)有限。

無名管道:一種半雙工的通信方式,只能在具有親緣關(guān)系的進程間使用(父子進程)。

優(yōu)點:簡單方便。

缺點:

  1. 局限于單向通信。
  2. 只能創(chuàng)建在它的進程以及其有親緣關(guān)系的進程之間。
  3. 緩沖區(qū)有限。

(2)信號量(Semaphore):一個計數(shù)器,可以用來控制多個線程對共享資源的訪問。

優(yōu)點:可以同步進程。

缺點:信號量有限。

(3)信號(Signal):一種比較復(fù)雜的通信方式,用于通知接收進程某個事件已經(jīng)發(fā)生。

(4)消息隊列(Message Queue):是消息的鏈表,存放在內(nèi)核中并由消息隊列標(biāo)識符標(biāo)識。

優(yōu)點:可以實現(xiàn)任意進程間的通信,并通過系統(tǒng)調(diào)用函數(shù)來實現(xiàn)消息發(fā)送和接收之間的同步,無需考慮同步問題,方便。

缺點:信息的復(fù)制需要額外消耗 CPU 的時間,不適宜于信息量大或操作頻繁的場合。

(5)共享內(nèi)存(Shared Memory):映射一段能被其他進程所訪問的內(nèi)存,這段共享內(nèi)存由一個進程創(chuàng)建,但多個進程都可以訪問。

優(yōu)點:無須復(fù)制,快捷,信息量大。

缺點:1.通信是通過將共享空間緩沖區(qū)直接附加到進程的虛擬地址空間中來實現(xiàn)的,因此進程間的讀寫操作的同步問題2.利用內(nèi)存緩沖區(qū)直接交換信息,內(nèi)存的實體存在于計算機中,只能同一個計算機系統(tǒng)中的諸多進程共享,不方便網(wǎng)絡(luò)通信。

(6)套接字(Socket):可用于不同計算機間的進程通信

優(yōu)點:

  1. 傳輸數(shù)據(jù)為字節(jié)級,傳輸數(shù)據(jù)可自定義,數(shù)據(jù)量小效率高。
  2. 傳輸數(shù)據(jù)時間短,性能高。
  3. 適合于客戶端和服務(wù)器端之間信息實時交互。
  4. 可以加密,數(shù)據(jù)安全性強。

缺點:需對傳輸?shù)臄?shù)據(jù)進行解析,轉(zhuǎn)化成應(yīng)用級的數(shù)據(jù)。

六、線程之間的通信

(1)鎖機制:包括互斥鎖/量(mutex)、讀寫鎖(reader-writer lock)、自旋鎖(spin lock)、條件變量(condition)。

  • 互斥鎖/量(mutex):提供了以排他方式防止數(shù)據(jù)結(jié)構(gòu)被并發(fā)修改的方法。
  • 讀寫鎖(reader-writer lock):允許多個線程同時讀共享數(shù)據(jù),而對寫操作是互斥的。
  • 自旋鎖(spin lock)與互斥鎖類似,都是為了保護共享資源?;コ怄i是當(dāng)資源被占用,申請者進入睡眠狀態(tài);而自旋鎖則循環(huán)檢測保持者是否已經(jīng)釋放鎖。
  • 條件變量(condition):可以以原子的方式阻塞進程,直到某個特定條件為真為止。對條件的測試是在互斥鎖的保護下進行的。條件變量始終與互斥鎖一起使用。

(2)信號量機制(Semaphore)。

  • 無名線程信號量
  • 命名線程信號量

(3)信號機制(Signal):類似進程間的信號處理。

(4)屏障(barrier):屏障允許每個線程等待,直到所有的合作線程都達到某一點,然后從該點繼續(xù)執(zhí)行。

七、對比/優(yōu)劣/選擇

圖片

圖片

選擇

  • 需要頻繁創(chuàng)建銷毀的優(yōu)先用線程。
  • 需要進行大量計算的優(yōu)先使用線程。
  • 強相關(guān)的處理用線程,弱相關(guān)的處理用進程。
  • 可能要擴展到多機分布的用進程,多核分布的用線程。
  • 都滿足需求的情況下,用你最熟悉、最拿手的方式就對了?。
責(zé)任編輯:姜華 來源: 松寶寫代碼
相關(guān)推薦

2023-02-24 14:46:32

Java線程池編程

2020-03-25 08:47:22

智能邊緣邊緣計算網(wǎng)絡(luò)

2012-12-27 10:58:24

KVMKVM概念

2023-10-25 08:17:06

Lite模式代理類

2023-10-29 08:35:47

AndroidAOP編程

2021-06-06 18:22:04

PprofGopher邏輯

2011-08-23 11:03:35

ATM

2025-01-16 10:41:40

2023-09-07 10:26:50

接口測試自動化測試

2019-08-07 17:18:18

云計算云原生函數(shù)

2022-02-08 12:06:12

云計算

2023-08-17 10:12:04

前端整潔架構(gòu)

2015-11-09 10:44:37

DevOpsIT運維

2020-12-10 09:00:00

開發(fā).NET工具

2021-12-09 07:47:58

Flink 提交模式

2023-12-24 12:56:36

協(xié)程

2023-09-14 08:30:46

JsonPathXPath

2017-05-26 18:30:34

華為

2018-04-25 15:53:12

霧計算

2021-08-11 10:00:51

緩存MyBatis管理
點贊
收藏

51CTO技術(shù)棧公眾號