成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

什么是進程?什么是線程?

開發 前端
當兩個線程是屬于同一個進程,因為虛擬內存是共享的,所以在切換時,虛擬內存這些資源就保持不動,只需要切換線程的私有數據、寄存器等不共享的數據;所以,線程的上下文切換相比進程,開銷要小很多。?

前言

話不多說,先來張思維腦圖~~

  • 進程與線程的關系
  • 并行與并發
  • 進程與線程的上下文切換

進程與線程的關系

什么是進程

我們編寫的代碼只是一個存儲在硬盤的靜態文件,通過編譯后就會生成二進制可執行文件,當我們運行這個可執行文件后,它會被裝載到內存中,接著 CPU 會執行程序中的每一條指令,那么這個運行中的程序,就被稱為「進程」(Process)。進程包括程序計數器、寄存器和程序變量的當前值。

進程的特征

  1. 進程依賴于程序運行而存在,進程是動態的,程序是靜態的。
  2. 進程是操作系統進行資源分配和調度的一個獨立單位。
  3. 每個進程擁有獨立的地址空間,地址空間包括代碼區、數據區和堆棧區,進程之間的地址空間是隔離的,互不影響。

什么是線程

進程的創建、銷毀與切換存在著較大的時空開銷,在80年代,線程的概念開始出現,線程被設計成進程的一個執行路徑,同一個進程中的線程共享進程的資源,因此系統對線程的調度所需的成本遠遠小于進程。

同一個進程內多個線程之間可以共享代碼段、數據段、打開的文件等資源,但每個線程各自都有一套獨立的寄存器和棧,這樣可以確保線程的控制流是相對獨立的。

線程的優點:

  • 一個進程中可以同時存在多個線程;
  • 各個線程之間可以并發執行;
  • 各個線程之間可以共享地址空間和文件等資源;

進程與線程的比較

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

對于,線程相比進程能減少開銷,體現在:

  • 線程的創建時間比進程快,因為進程在創建的過程中,還需要資源管理信息,比如內存管理信息、文件管理信息,而線程在創建的過程中,不會涉及這些資源管理信息,而是共享它們;
  • 線程的終止時間比進程快,因為線程釋放的資源相比進程少很多;
  • 同一個進程內的線程切換比進程切換快。
  • 由于同一進程的各線程間共享內存和文件資源,那么在線程之間數據傳遞的時候,就不需要經過內核了,這就使得線程之間的數據交互效率更高了;

所以,不管是時間效率,還是空間效率線程比進程都要高。

進程與線程的關系圖

并行與并發

多個程序、交替執行的思想,就有 CPU 管理多個進程的初步想法。

對于一個支持多進程的系統,CPU 會從一個進程快速切換至另一個進程,其間每個進程各運行幾十或幾百個毫秒。

雖然單核的 CPU 在某一個瞬間,只能運行一個進程。但在 1 秒鐘期間,它可能會運行多個進程,這樣就產生并行的錯覺,實際上這是并發。

上下文切換

進程的上下文切換

所謂的進程上下文,就是一個進程在執行的時候,CPU的所有寄存器中的值、進程的狀態以及堆棧上的內容,當內核需要切換到另一個進程時,它 需要保存當前進程的所有狀態,即保存當前進程的進程上下文,以便再次執行該進程時,能夠恢復切換時的狀態,繼續執行。

發生進程上下文切換有哪些場景?

  • 為了保證所有進程可以得到公平調度,CPU 時間被劃分為一段段的時間片,這些時間片再被輪流分配給各個進程。
  • 進程在系統資源不足(比如內存不足)時,要等到資源滿足后才可以運行,這個時候進程也會被掛起,并由系統調度其他進程運行;
  • 當進程通過睡眠函數 sleep 這樣的方法將自己主動掛起時,自然也會重新調度;
  • 當有優先級更高的進程運行時,為了保證高優先級進程的運行,當前進程會被掛起,由高優先級進程來運行;

線程的上下文切換

當進程擁有多個線程時,這些線程會共享相同的虛擬內存和全局變量等資源,這些資源在上下文切換時是不需要修改的;

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

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

當兩個線程是屬于同一個進程,因為虛擬內存是共享的,所以在切換時,虛擬內存這些資源就保持不動,只需要切換線程的私有數據、寄存器等不共享的數據;

所以,線程的上下文切換相比進程,開銷要小很多。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2021-03-20 22:46:22

IaaSSaaSPaaS

2019-01-28 08:50:09

線程安全

2020-07-14 14:59:00

控制反轉依賴注入容器

2017-12-19 21:29:58

物聯網區塊鏈大數據

2023-12-20 14:35:37

Java虛擬線程

2020-11-20 10:51:03

云計算

2025-02-03 00:40:00

線程組Java并發編程

2017-12-15 09:40:47

Linux僵尸進程

2024-05-20 13:13:01

線程安全Java

2019-09-23 13:10:02

容器進程

2018-01-30 11:17:56

集群分布式SOA?

2023-09-14 15:00:31

2009-07-16 09:56:32

什么是iBATIS

2022-08-15 06:00:00

二進制編程語言

2016-06-13 14:49:40

2012-04-25 17:15:44

EA

2016-05-09 10:31:29

DockerLinux

2021-07-28 09:48:54

XML標記語言

2011-08-16 18:39:05

Ubuntu

2010-08-26 09:27:53

DHCP服務器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久草视| 久久久久国产一级毛片高清网站 | 91在线看 | 中文字幕av网 | 日韩久久综合网 | 欧美一区二区三区久久精品 | 一区在线视频 | 亚洲免费视频在线观看 | 成人深夜福利 | 欧美激情久久久 | 欧美午夜视频 | 日韩福利在线观看 | 欧美日韩综合 | 欧美成人一区二免费视频软件 | 国产成人av免费看 | 成人免费在线视频 | 久久美女网| 久久亚洲经典 | 一区二区三区四区在线视频 | 亚洲国产欧美国产综合一区 | 欧美理论在线观看 | 四色永久 | 亚洲一区二区三区免费在线观看 | 欧美日韩视频 | 国产精品入口 | 欧美区日韩区 | 精品在线一区 | 国产精品视频在线观看 | 欧美激情视频一区二区三区在线播放 | 免费视频久久久久 | 日韩中文字幕一区二区 | 欧美精产国品一二三区 | 成人免费观看视频 | 欧美精品一区二区三区四区五区 | 久久久精选 | 亚洲国产成人精品女人久久久 | 日韩精品在线视频免费观看 | 在线精品一区二区三区 | 国产精品久久久久久久久久免费看 | 九九热精品视频在线观看 | 成人在线视频一区 |