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

什么是進(jìn)程?什么是線程?

開(kāi)發(fā) 前端
當(dāng)兩個(gè)線程是屬于同一個(gè)進(jìn)程,因?yàn)樘摂M內(nèi)存是共享的,所以在切換時(shí),虛擬內(nèi)存這些資源就保持不動(dòng),只需要切換線程的私有數(shù)據(jù)、寄存器等不共享的數(shù)據(jù);所以,線程的上下文切換相比進(jìn)程,開(kāi)銷要小很多。?

前言

話不多說(shuō),先來(lái)張思維腦圖~~

  • 進(jìn)程與線程的關(guān)系
  • 并行與并發(fā)
  • 進(jìn)程與線程的上下文切換

進(jìn)程與線程的關(guān)系

什么是進(jìn)程

我們編寫的代碼只是一個(gè)存儲(chǔ)在硬盤的靜態(tài)文件,通過(guò)編譯后就會(huì)生成二進(jìn)制可執(zhí)行文件,當(dāng)我們運(yùn)行這個(gè)可執(zhí)行文件后,它會(huì)被裝載到內(nèi)存中,接著 CPU 會(huì)執(zhí)行程序中的每一條指令,那么這個(gè)運(yùn)行中的程序,就被稱為「進(jìn)程」(Process)。進(jìn)程包括程序計(jì)數(shù)器、寄存器和程序變量的當(dāng)前值。

進(jìn)程的特征

  1. 進(jìn)程依賴于程序運(yùn)行而存在,進(jìn)程是動(dòng)態(tài)的,程序是靜態(tài)的。
  2. 進(jìn)程是操作系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。
  3. 每個(gè)進(jìn)程擁有獨(dú)立的地址空間,地址空間包括代碼區(qū)、數(shù)據(jù)區(qū)和堆棧區(qū),進(jìn)程之間的地址空間是隔離的,互不影響。

什么是線程

進(jìn)程的創(chuàng)建、銷毀與切換存在著較大的時(shí)空開(kāi)銷,在80年代,線程的概念開(kāi)始出現(xiàn),線程被設(shè)計(jì)成進(jìn)程的一個(gè)執(zhí)行路徑,同一個(gè)進(jìn)程中的線程共享進(jìn)程的資源,因此系統(tǒng)對(duì)線程的調(diào)度所需的成本遠(yuǎn)遠(yuǎn)小于進(jìn)程。

同一個(gè)進(jìn)程內(nèi)多個(gè)線程之間可以共享代碼段、數(shù)據(jù)段、打開(kāi)的文件等資源,但每個(gè)線程各自都有一套獨(dú)立的寄存器和棧,這樣可以確保線程的控制流是相對(duì)獨(dú)立的。

線程的優(yōu)點(diǎn):

  • 一個(gè)進(jìn)程中可以同時(shí)存在多個(gè)線程;
  • 各個(gè)線程之間可以并發(fā)執(zhí)行;
  • 各個(gè)線程之間可以共享地址空間和文件等資源;

進(jìn)程與線程的比較

  • 進(jìn)程是資源(包括內(nèi)存、打開(kāi)的文件等)分配的單位,線程是 CPU 調(diào)度的基本單位;
  • 資源開(kāi)銷:每個(gè)進(jìn)程都有獨(dú)立的地址空間,進(jìn)程之間的切換會(huì)有較大的開(kāi)銷;線程可以看做輕量級(jí)的進(jìn)程,同一個(gè)進(jìn)程內(nèi)的線程共享進(jìn)程的地址空間,每個(gè)線程都有自己獨(dú)立的運(yùn)行棧和程序計(jì)數(shù)器,線程之間切換的開(kāi)銷小。
  • 包含關(guān)系:一個(gè)進(jìn)程至少有一個(gè)線程,線程是進(jìn)程的一部分,所以線程也被稱為輕權(quán)進(jìn)程或者輕量級(jí)進(jìn)程。

對(duì)于,線程相比進(jìn)程能減少開(kāi)銷,體現(xiàn)在:

  • 線程的創(chuàng)建時(shí)間比進(jìn)程快,因?yàn)檫M(jìn)程在創(chuàng)建的過(guò)程中,還需要資源管理信息,比如內(nèi)存管理信息、文件管理信息,而線程在創(chuàng)建的過(guò)程中,不會(huì)涉及這些資源管理信息,而是共享它們;
  • 線程的終止時(shí)間比進(jìn)程快,因?yàn)榫€程釋放的資源相比進(jìn)程少很多;
  • 同一個(gè)進(jìn)程內(nèi)的線程切換比進(jìn)程切換快。
  • 由于同一進(jìn)程的各線程間共享內(nèi)存和文件資源,那么在線程之間數(shù)據(jù)傳遞的時(shí)候,就不需要經(jīng)過(guò)內(nèi)核了,這就使得線程之間的數(shù)據(jù)交互效率更高了;

所以,不管是時(shí)間效率,還是空間效率線程比進(jìn)程都要高。

進(jìn)程與線程的關(guān)系圖

并行與并發(fā)

多個(gè)程序、交替執(zhí)行的思想,就有 CPU 管理多個(gè)進(jìn)程的初步想法。

對(duì)于一個(gè)支持多進(jìn)程的系統(tǒng),CPU 會(huì)從一個(gè)進(jìn)程快速切換至另一個(gè)進(jìn)程,其間每個(gè)進(jìn)程各運(yùn)行幾十或幾百個(gè)毫秒。

雖然單核的 CPU 在某一個(gè)瞬間,只能運(yùn)行一個(gè)進(jìn)程。但在 1 秒鐘期間,它可能會(huì)運(yùn)行多個(gè)進(jìn)程,這樣就產(chǎn)生并行的錯(cuò)覺(jué),實(shí)際上這是并發(fā)。

上下文切換

進(jìn)程的上下文切換

所謂的進(jìn)程上下文,就是一個(gè)進(jìn)程在執(zhí)行的時(shí)候,CPU的所有寄存器中的值、進(jìn)程的狀態(tài)以及堆棧上的內(nèi)容,當(dāng)內(nèi)核需要切換到另一個(gè)進(jìn)程時(shí),它 需要保存當(dāng)前進(jìn)程的所有狀態(tài),即保存當(dāng)前進(jìn)程的進(jìn)程上下文,以便再次執(zhí)行該進(jìn)程時(shí),能夠恢復(fù)切換時(shí)的狀態(tài),繼續(xù)執(zhí)行。

發(fā)生進(jìn)程上下文切換有哪些場(chǎng)景?

  • 為了保證所有進(jìn)程可以得到公平調(diào)度,CPU 時(shí)間被劃分為一段段的時(shí)間片,這些時(shí)間片再被輪流分配給各個(gè)進(jìn)程。
  • 進(jìn)程在系統(tǒng)資源不足(比如內(nèi)存不足)時(shí),要等到資源滿足后才可以運(yùn)行,這個(gè)時(shí)候進(jìn)程也會(huì)被掛起,并由系統(tǒng)調(diào)度其他進(jìn)程運(yùn)行;
  • 當(dāng)進(jìn)程通過(guò)睡眠函數(shù) sleep 這樣的方法將自己主動(dòng)掛起時(shí),自然也會(huì)重新調(diào)度;
  • 當(dāng)有優(yōu)先級(jí)更高的進(jìn)程運(yùn)行時(shí),為了保證高優(yōu)先級(jí)進(jìn)程的運(yùn)行,當(dāng)前進(jìn)程會(huì)被掛起,由高優(yōu)先級(jí)進(jìn)程來(lái)運(yùn)行;

線程的上下文切換

當(dāng)進(jìn)程擁有多個(gè)線程時(shí),這些線程會(huì)共享相同的虛擬內(nèi)存和全局變量等資源,這些資源在上下文切換時(shí)是不需要修改的;

不過(guò),線程也有自己的私有數(shù)據(jù),比如棧和寄存器等,這些在上下文切換時(shí)也是需要保存的。

線程上下文切換的是什么?

當(dāng)兩個(gè)線程是屬于同一個(gè)進(jìn)程,因?yàn)樘摂M內(nèi)存是共享的,所以在切換時(shí),虛擬內(nèi)存這些資源就保持不動(dòng),只需要切換線程的私有數(shù)據(jù)、寄存器等不共享的數(shù)據(jù);

所以,線程的上下文切換相比進(jìn)程,開(kāi)銷要小很多。

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2021-03-20 22:46:22

IaaSSaaSPaaS

2019-01-28 08:50:09

線程安全

2020-07-14 14:59:00

控制反轉(zhuǎn)依賴注入容器

2023-12-20 14:35:37

Java虛擬線程

2017-12-19 21:29:58

物聯(lián)網(wǎng)區(qū)塊鏈大數(shù)據(jù)

2017-12-15 09:40:47

Linux僵尸進(jìn)程

2024-05-20 13:13:01

線程安全Java

2025-02-03 00:40:00

線程組Java并發(fā)編程

2019-09-23 13:10:02

容器進(jìn)程

2020-11-20 10:51:03

云計(jì)算

2023-12-11 08:03:01

Java線程線程組

2020-09-03 06:42:12

線程安全CPU

2010-08-26 09:27:53

DHCP服務(wù)器

2018-01-30 11:17:56

集群分布式SOA?

2011-08-16 18:39:05

Ubuntu

2016-05-09 10:31:29

DockerLinux

2021-07-28 09:48:54

XML標(biāo)記語(yǔ)言

2022-03-16 07:33:40

守護(hù)線程用戶線程語(yǔ)言

2023-09-14 15:00:31

2022-08-15 06:00:00

二進(jìn)制編程語(yǔ)言
點(diǎn)贊
收藏

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