乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      一篇讓你明白進程與線程之間的區(qū)別與聯(lián)系

       ekylin 2022-01-10

      前言

      歡迎關(guān)注公眾號:Coder編程

      本章主要介紹進程與線程的區(qū)別與聯(lián)系相關(guān)知識點,也是我們面試過程中,經(jīng)常會問到的了一個問題。希望通過這篇文章,能讓大家理解相關(guān)知識點~

      涉及面試題:

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

      上面的面試題可以看出,其實都是一回事,只是換了一種提問方式,只要我們能掌握核心要點,隨便面試官怎么提問,我們都能輕松應(yīng)對!

      1. 小栗子:

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

      來源百度百科:

      進程(Process) 是計算機中的程序關(guān)于某數(shù)據(jù)集合上的一次運行活動,是系統(tǒng)進行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。 在當(dāng)代面向線程設(shè)計的計算機結(jié)構(gòu)中,進程是線程的容器。程序是指令、數(shù)據(jù)及其組織形式的描述,進程是程序的實體。是計算機中的程序關(guān)于某數(shù)據(jù)集合上的一次運行活動,是系統(tǒng)進行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。程序是指令、數(shù)據(jù)及其組織形式的描述,進程是程序的實體。

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

      我們簡單總結(jié)下:

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

      線程:系統(tǒng)分配處理器時間資源的基本單元,或者說進程之內(nèi)獨立執(zhí)行的一個單元執(zhí)行流。線程——程序執(zhí)行的最小單位。

      2. 深入理解:

      進程

      2.1 進程(線程+內(nèi)存+文件/網(wǎng)絡(luò)句柄)

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

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

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

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

      線程

      2.2 線程(棧+PC+TLS)

      2.2.1 棧:

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

      2.2.2 PC:

      Program Counter 程序計數(shù)器,操作系統(tǒng)真正運行的是一個個的線程,
      而我們的進程只是它的一個容器。PC就是指向當(dāng)前的指令,而這個指令是放在內(nèi)存中。
      每個線程都有一串自己的指針,去指向自己當(dāng)前所在內(nèi)存的指針。
      計算機絕大部分是存儲程序性的,說的就是我們的數(shù)據(jù)和程序是存儲在同一片內(nèi)存里的
      這個內(nèi)存中既有我們的數(shù)據(jù)變量又有我們的程序。所以我們的PC指針就是指向我們的內(nèi)存的。

      2.2.2.1 緩沖區(qū)溢出

      例如我們經(jīng)常聽到一個漏洞:緩沖區(qū)溢出
      這是什么意思呢?
      例如:我們有個地方要輸入用戶名,本來是用來存數(shù)據(jù)的地方。
      然后黑客把數(shù)據(jù)輸入的特別長。這個長度超出了我們給數(shù)據(jù)存儲的內(nèi)存區(qū),這時候跑到了
      我們給程序分配的一部分內(nèi)存中。黑客就可以通過這種辦法將他所要運行的代碼
      寫入到用戶名框中,來植入進來。我們的解決方法就是,用用戶名的長度來限制不要超過
      用戶名的緩沖區(qū)的大小來解決。

      2.3 TLS:

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

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

      通過TCP/IP的端口來實現(xiàn)

      在后續(xù)的文章中我們將一一詳細(xì)介紹!

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

      線程的通信就比較簡單,有一大塊共享的內(nèi)存,只要大家的指針是同一個就可以看到各自的內(nèi)存。

      在后續(xù)的文章中我們將一一詳細(xì)介紹!

      5.小結(jié):

      1.進程要分配一大部分的內(nèi)存,而線程只需要分配一部分棧就可以了.
      2.一個程序至少有一個進程,一個進程至少有一個線程.
      3.進程是資源分配的最小單位,線程是程序執(zhí)行的最小單位。
      4.一個線程可以創(chuàng)建和撤銷另一個線程,同一個進程中的多個線程之間可以并發(fā)執(zhí)行.

      文末

      文末

      歡迎關(guān)注個人微信公眾號:Coder編程
      獲取最新原創(chuàng)技術(shù)文章和免費學(xué)習(xí)資料,更有大量精品思維導(dǎo)圖、面試資料、PMP備考資料等你來領(lǐng),方便你隨時隨地學(xué)習(xí)技術(shù)知識!
      新建了一個qq群:315211365,歡迎大家進群交流一起學(xué)習(xí)。謝謝了!也可以介紹給身邊有需要的朋友。

      文章收錄至
      Github: https://github.com/CoderMerlin/coder-programming
      Gitee: https:///573059382/coder-programming

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多