榮耀magic3|并發編程——基礎概念(一)

榮耀magic3|并發編程——基礎概念(一)
文章圖片
榮耀magic3|并發編程——基礎概念(一)
文章圖片
榮耀magic3|并發編程——基礎概念(一)


前言并發編程在我們日常開發中是時時刻刻都有在用的 , 只不過大部分的代碼底層已經幫我們去做了一些并發編程的安全處理 , 但是還是有很多情況下需要我們自己去控制 , 所以我們需要去了解學習并發編程 , 那么我們一步一步深入的開始學習 。
本篇為概念性的東西 , 可能比較冗長 , 請耐心解讀 , 對于學習并發編程之前我們首先要知道這些基本的概念 。
基礎概念1.什么是進程和線程進程是程序運行資源分配的最小單位
進程是操作系統進行資源分配的最小單位其中資源包括:CPU、內存空間、磁盤 IO 等同一進程中的多條線程共享該進程中的全部系統資源而進程和進程之間是相互獨立的 。 進程是具有一定獨立功能的程序關于某個數據集合上的一次運行活動進程是系統進行資源分配和調度的一個獨立單位 。
進程是程序在計算機上的一次執行活動 。 當你運行一個程序你就啟動了一個進程 。 顯然程序是死的、靜態的進程是活的、動態的 。 進程可以分為系統進 程和用戶進程 。 凡是用于完成操作系統的各種功能的進程就是系統進程它們就是處于運行狀態下的操作系統本身用戶進程就是所有由你啟動的進程 。
線程是 CPU 調度的最小單位必須依賴于進程而存在
線程是進程的一個實體是 CPU 調度和分派的基本單位它是比進程更小的、能獨立運行的基本單位 。 線程自己基本上不擁有系統資源只擁有一點在運行中必不可少的資源(如程序計數器一組寄存器和棧)但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源 。
線程無處不在
任何一個程序都必須要創建線程特別是 Java 不管任何程序都必須啟動一個 main 函數的主線程; Java Web 開發里面的定時任務、定時器、JSP 和 Servlet、異步消息處理機制遠程訪問接口RM等任何一個監聽事件 onclick的觸發事件等都離不開線程和并發的知識 。
2.CPU核心數和線程數的關系多核心:也指單芯片多處理器( Chip Multiprocessors簡稱 CMP)CMP 是由美國 斯坦福大學提出的其思想是將大規模并行處理器中的 SMP(對稱多處理器)集成 到同一芯片內各個處理器并行執行不同的進程 。 這種依靠多個 CPU 同時并行地運行程序是實現超高速計算的一個重要方向稱為并行處理
多線程: Simultaneous Multithreading.簡稱 SMT.讓同一個處理器上的多個線程同步執行并共享處理器的執行資源 。
核心數、線程數:目前主流 CPU 都是多核的 。 增加核心數目就是為了增加線程數因為操作系統是通過線程來執行任務的一般情況下它們是 1:1 對應關系也 就是說四核 CPU 一般擁有四個線程 。 但 Intel 引入超線程技術后使核心數與線程 數形成 1:2 的關系 。
3.CPU 時間片輪轉機制我們平時在開發的時候 , 感覺并沒有受 cpu 核心數的限制 , 想啟動線程就啟動線程 , 哪怕是在單核 CPU 上 , 為什么?這是因為操作系統提供了一種 CPU 時間片輪轉機制 。
時間片輪轉調度是一種最古老、最簡單、最公平且使用最廣的算法又稱 RR 調度 。 每個進程被分配一個時間段稱作它的時間片即該進程允許運行的時間 。
百度百科對 CPU 時間片輪轉機制原理解釋如下:
如果在時間片結束時進程還在運行則 CPU 將被剝奪并分配給另一個進程 。 如果進程在時間片結束前阻塞或結來則 CPU 當即進行切換 。 調度程序所要做的就是維護一張就緒進程列表當進程用完它的時間片后它被移到隊列的末尾

相關經驗推薦