本文系做者 chaoCode原創,轉載請私信並在文章開頭附帶做者和原文地址連接。算法
違者,做者保留追究權利。編程
併發編程在咱們平常開發中是時時刻刻都有在用的,只不過大部分的代碼底層已經幫咱們去作了一些併發編程的安全處理,可是仍是有不少狀況下須要咱們本身去控制,因此咱們須要去了解學習併發編程,那麼咱們一步一步深刻的開始學習。安全
本篇爲概念性的東西,可能比較冗長,請耐心解讀,對於學習併發編程以前咱們首先要知道這些基本的概念。多線程
進程是程序運行資源分配的最小單位
進程是操做系統進行資源分配的最小單位,其中資源包括:CPU、內存空間、磁盤 IO 等,同一進程中的多條線程共享該進程中的所有系統資源,而進程和進程之間是相互獨立的。進程是具備必定獨立功能的程序關於某個數據集合上的一次運行活動,進程是系統進行資源分配和調度的一個獨立單位。
進程是程序在計算機上的一次執行活動。當你運行一個程序,你就啓動了一個進程。顯然,程序是死的、靜態的,進程是活的、動態的。進程能夠分爲系統進 程和用戶進程。凡是用於完成操做系統的各類功能的進程就是系統進程,它們就是處於運行狀態下的操做系統自己,用戶進程就是全部由你啓動的進程。併發
線程是 CPU 調度的最小單位,必須依賴於進程而存在
線程是進程的一個實體,是 CPU 調度和分派的基本單位,它是比進程更小的、能獨立運行的基本單位。線程本身基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),可是它可與同屬一個進程的其餘的線程共享進程所擁有的所有資源。異步
線程無處不在
任何一個程序都必需要建立線程,特別是 Java 無論任何程序都必須啓動一個 main 函數的主線程; Java Web 開發裏面的定時任務、定時器、JSP 和 Servlet、異步消息處理機制,遠程訪問接口RM等,任何一個監聽事件, onclick的觸發事件等都離不開線程和併發的知識。函數
多核心:也指單芯片多處理器( Chip Multiprocessors,簡稱 CMP),CMP 是由美國 斯坦福大學提出的,其思想是將大規模並行處理器中的 SMP(對稱多處理器)集成 到同一芯片內,各個處理器並行執行不一樣的進程。這種依靠多個 CPU 同時並行地運行程序是實現超高速計算的一個重要方向,稱爲並行處理學習
多線程: Simultaneous Multithreading.簡稱 SMT.讓同一個處理器上的多個線程同步執行並共享處理器的執行資源。操作系統
核心數、線程數:目前主流 CPU 都是多核的。增長核心數目就是爲了增長線程數,由於操做系統是經過線程來執行任務的,通常狀況下它們是 1:1 對應關係,也 就是說四核 CPU 通常擁有四個線程。但 Intel 引入超線程技術後,使核心數與線程 數造成 1:2 的關係。線程
咱們平時在開發的時候,感受並無受 cpu 核心數的限制,想啓動線程就啓動線程,哪怕是在單核 CPU 上,爲何?這是由於操做系統提供了一種 CPU 時間片輪起色制。
時間片輪轉調度是一種最古老、最簡單、最公平且使用最廣的算法,又稱 RR 調度。每一個進程被分配一個時間段,稱做它的時間片,即該進程容許運行的時間。
百度百科對 CPU 時間片輪起色制原理解釋以下:
若是在時間片結束時進程還在運行,則 CPU 將被剝奪並分配給另外一個進程。若是進程在時間片結束前阻塞或結來,則 CPU 立即進行切換。調度程序所要作的就是維護一張就緒進程列表,當進程用完它的時間片後,它被移到隊列的末尾
時間片輪轉調度中惟一有趣的一點是時間片的長度。從一個進程切換到另外一個進程是須要定時間的,包括保存和裝入寄存器值及內存映像,更新各類表格和隊列等。假如進程切(processwitch),有時稱爲上下文切換( context switch),須要 5ms, 再假設時間片設爲 20ms,則在作完 20ms 有用的工做以後,CPU 將花費 5ms 來進行進程切換。CPU 時間的 20% 被浪費在了管理開銷上了。
爲了提升 CPU 效率,咱們能夠將時間片設爲 5000ms。這時浪費的時間只有 0.1%。但考慮到在一個分時系統中,若是有 10 個交互用戶幾乎同時按下回車鍵,將發生什麼狀況?假設全部其餘進程都用足它們的時間片的話,最後一個不幸的進程不得不等待 5s 纔得到運行機會。多數用戶沒法忍受一條簡短命令要 5 才能作出響應,一樣的問題在一臺支持多道程序的我的計算機上也會發生。
結論能夠歸結以下:時間片設得過短會致使過多的進程切換,下降了 CPU 效率: 而設得太長又可能引發對短的交互請求的響應變差。將時間片設爲 100ms 一般是一個比較合理的折衷。
在 CPU 死機的狀況下,其實你們不難發現當運行一個程序的時候把 CPU 給弄 到了 100%再不重啓電腦的狀況下,其實咱們仍是有機會把它Kill掉的,我想也正是由於這種機制的緣故。
感謝諸君的觀看,文中若有紕漏,歡迎在評論區來交流。若是這篇文章幫助到了你,歡迎點贊👍和關注。