tft每日頭條

 > 生活

 > 進程與線程的區别詳解

進程與線程的區别詳解

生活 更新时间:2024-07-26 19:19:27

前言

歡迎關注公衆号:Coder編程 獲取最新原創技術文章和相關免費學習資料,随時随地學習技術知識!

本章主要介紹進程與線程的區别與聯系相關知識點,也是我們面試過程中,經常會問到的了一個問題。希望通過這篇文章,能讓大家理解相關知識點~

進程與線程的區别詳解(一篇讓你明白進程與線程之間的區别與聯系)1

涉及面試題:

  • 1.進程與線程之間有什麼區别?
  • 2.進程、線程都各有什麼特點?
  • 3.進程之間的是怎麼進行交互的呢?
  • 4.什麼是緩沖區溢出?
  • 5.進程之間如何進行交互?
  • 6.線程之間如何進行交互?

上面的面試題可以看出,其實都是一回事,隻是換了一種提問方式,隻要我們能掌握核心要點,随便面試官怎麼提問,我們都能輕松應對!

1. 小栗子:

我們生活中有許許多多關于進程與線程的小栗子,比如:1.我們使用打開一個微信軟件,這個時候就開啟了一個進程, 當我們在微信裡面進行各種操作(查看朋友圈,掃一掃...),這麼多的操作就是線程。 所以我們可以說“進程”是包含“線程”的,“線程”是“進程”的一個子集。

來源百度百科:

進程(Process) 是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。 在當代面向線程設計的計算機結構中,進程是線程的容器。程序是指令、數據及其組織形式的描述,進程是程序的實體。是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。程序是指令、數據及其組織形式的描述,進程是程序的實體。

線程(thread) 是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以并發多個線程,每條線程并行執行不同的任務。

我們簡單總結下:

進程:指在系統中正在運行的一個應用程序;程序一旦運行就是進程;進程——資源分配的最小單位。

線程:系統分配處理器時間資源的基本單元,或者說進程之内獨立執行的一個單元執行流。線程——程序執行的最小單位。

2. 深入理解:

進程與線程的區别詳解(一篇讓你明白進程與線程之間的區别與聯系)2

2.1 進程(線程 内存 文件/網絡句柄)

我們通過上面的圖片進行進一步理解:

“内存”: 我們通常所理解的内存是我們所見到的(2G/4G/8G/16G)物理内存,它為什麼會在進程之中呢? 實際上,這裡的内存是邏輯内存。指的是内存的尋址空間。每個進程的内存是相互獨立的。 否則的話會出現一個問題:我們把指針的值改一改就指向其他進程的内存了,通過這樣我們豈不是就可以看到其他進程中"微信"或者是"網上銀行"的信息, 這樣的話,那我們的微信聊天記錄或者是銀行賬戶的信息就都被别人找到了,這是一個很危險的信号!顯然這樣是不可能的。

“文件/網絡句柄”: 它們是所有的進程所共有的,例如打開同一個文件,去搶同一個網絡的端口這樣的操作是被允許的。

“線程”: 接下來,我們就要介紹一下我們的“線程”有關知識

進程與線程的區别詳解(一篇讓你明白進程與線程之間的區别與聯系)3

2.2 線程(棧 PC TLS)

2.2.1 棧:

我們通常都是說調用堆棧,其實這裡的堆是沒有含義的,調用堆棧就是調用棧的意思。 那麼我們的棧裡面有什麼呢? 我們從主線程的入口main函數,會不斷的進行函數調用, 每次調用的時候,會把所有的參數和返回地址壓入到棧中。

2.2.2 PC:

Program Counter 程序計數器,操作系統真正運行的是一個個的線程, 而我們的進程隻是它的一個容器。PC就是指向當前的指令,而這個指令是放在内存中。 每個線程都有一串自己的指針,去指向自己當前所在内存的指針。 計算機絕大部分是存儲程序性的,說的就是我們的數據和程序是存儲在同一片内存裡的 這個内存中既有我們的數據變量又有我們的程序。所以我們的PC指針就是指向我們的内存的。

2.2.2.1 緩沖區溢出

例如我們經常聽到一個漏洞:緩沖區溢出 這是什麼意思呢? 例如:我們有個地方要輸入用戶名,本來是用來存數據的地方。 然後黑客把數據輸入的特别長。這個長度超出了我們給數據存儲的内存區,這時候跑到了 我們給程序分配的一部分内存中。黑客就可以通過這種辦法将他所要運行的代碼 寫入到用戶名框中,來植入進來。我們的解決方法就是,用用戶名的長度來限制不要超過 用戶名的緩沖區的大小來解決。

2.3 TLS:

全稱:thread local storage 之前我們看到每個進程都有自己獨立的内存,這時候我們想,我們的線程有沒有一塊獨立的内存呢?答案是有的,就是TLS。 可以用來存儲我們線程所獨有的數據。 可以看到:線程才是我們操作系統所真正去運行的,而進程呢,則是像容器一樣他把需要的一些東西放在了一起,而把不需要的東西做了一層隔離,進行隔離開來。

3. 進程之間的是怎麼進行交互的呢?

通過TCP/IP的端口來實現

在後續的文章中我們将一一詳細介紹!

4. 線程之間又是怎樣進行交互?

線程的通信就比較簡單,有一大塊共享的内存,隻要大家的指針是同一個就可以看到各自的内存。

在後續的文章中我們将一一詳細介紹!

5.小結:

1.進程要分配一大部分的内存,而線程隻需要分配一部分棧就可以了. 2.一個程序至少有一個進程,一個進程至少有一個線程. 3.進程是資源分配的最小單位,線程是程序執行的最小單位。 4.一個線程可以創建和撤銷另一個線程,同一個進程中的多個線程之間可以并發執行.

文末

本章節介紹了進程與線程之間的區别與聯系,以及其他方面的小知識點,也是面試過程中會出現的内容點。 裡面涉及到了許多的小知識點,我們并沒有擴展開來講解,會放在今後的文章中做進一步的闡述。 歡迎關注公衆号:Coder編程 獲取最新原創技術文章和相關免費學習資料,随時随地學習技術知識!

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved