多線程:原理分析整理

操做系統的設計,能夠歸結爲三點:

  • (1)以多進程形式,容許多個任務同時運行;
  • (2)以多線程形式,容許單個任務分紅不一樣的部分運行;
  • (3)提供協調機制,一方面防止進程之間和線程之間產生衝突,另外一方面容許進程之間和線程之間共享資源。

多核多處理器(多CPU)多線程

  • 多核:幾核就是真的有幾個物理核心。CPU的性能主要靠提升核心工做頻率來提升,因爲物理限制,不能把頻率無限提升,因此發展出多核心的CPU。即一枚處理器上集成多個計算引擎(內核),共享緩存、內存、寄存器。A8處理器是一款雙核處理器。
  • 多處理器:包含多個CPU,CPU之間共享內存、I/O設備、控制器、外部設備,整個硬件系統由統一的操做系統控制,在處理器和程序之間實現做業、任務、程序、數組及其元素各級的全面並行。目前主流的服務器架構,超級計算機,都是多CPU多核架構。
  • 多線程:線程就是咱們爲了讓一個進程可以同時幹多件事情而發明的「分身術」,擁有最小系統資源,共享進程資源的基本調度單位。核是物理的,線程是虛擬的,雙核4線程,看起來很像4核,但比真實的4核4線程慢,卻比雙核雙線程快。

進程VS線程

進程

就是進行中的程序(一組指令的有序集合),當一個程序被加載到內存中以後就變成了進程(進程=程序+執行)。進程有獨立的地址空間,在保護模式下本身出了問題不會對其餘進程產生影響。進程是操做系統分配資源的基本單位。 進程的三種狀態:html

  • 阻塞態:等待某個事件的完成
  • 就緒態:等待系統分配CPU以便運行
  • 執行態:佔有CPU正在運行

線程

是進程的一個實體,是CPU調度和分派的基本單位,本身擁有一點運行必不可少的資源(如程序計數器、一組寄存器和堆棧)與同屬進程的其餘線程共享進程的擁有的所有資源。 面試

進程與線程區別

  • 進程是cpu資源分配的最小單位,線程是cpu調度的最小單位。
  • 一個程序至少有一個進程,一個進程至少有一個線程。線程依賴於進程才能運行
  • 線程自己擁有不多資源(線程標識符、程序計數器、一組寄存器的值、堆棧),與同屬進程的其餘線程共享進程擁有的資源(代碼段、數據段、打開的文件、I/O設備等)。
  • 線程開銷小,但一個線程死掉等於整個進程死掉,不利於資源管理和保護。而進程正好相反,開銷大,但相對線程安全。

引入線程帶來的主要好處:

之前進程既是資源分配也是調度的最小單位,後來爲了更合理的使用cpu(其實是cpu性能愈來愈好),纔將資源分配和調度分開,就有了線程線程是創建在進程的基礎上的一次程序運行單位。數組

  • 在進程內建立、終止線程比建立、終止進程快
  • 同一進程內切換線程比切換進程要快,尤爲是用戶級的線程切換。

線程操做系統來講就是一段代碼+運行時數據(主要是寄存器數據,還有線程中與資源相關的數據,好比打開的文件句柄)。多線程實現主要是靠硬件CPU(中央處理器)件來實現的,CPU有一個很重要的特性時間片,每一段得到CPU的代碼只能運行一個時間片限定的時間,時間到後CPU就會把正在運行的代碼暫停,接着發生一箇中斷,而後按照必定的規則選擇另外一段代碼得到CPU來運行。緩存

時間片設得過短會致使過多的進程切換,下降了CPU效率;而設得太長又可能引發對短的交互請求的響應變差。將時間片設爲100毫秒一般是一個比較合理的折衷。安全

線程越多越好嗎

線程多了,能夠提升程序的執行效率,但並非越多越好。服務器

  • 雖然線程自己擁有不多的資源(在iOS中,默認主線程1M,子線程512K),可是更多的線程意味着更多的內存開銷。建立線程也是須要CPU開銷的。
  • 若是線程比核的數量多,則同一時間只能執行與核數量相等的線程數,線程過多會致使頻繁的切換,消耗過多的CPU時間,下降了程序性能。
  • 使用多線程就可能出現線程安全問題,爲了解決線程安全須要使用鎖,進而可能會出現死鎖問題。過多的線程會增長程序設計的複雜性,浪費更多精力去處理多線程通訊和數據共享(多線程安全、多線程死鎖)。

參考博客

淺析操做系統的進程、線程區別多線程

操做系統核心原理-3.進程原理(上):進程概要架構

多線程-概述及底層實現機制淺析性能

操做系統面試總結—進程線程操作系統

騰訊面試題04.進程和線程的區別?

相關文章
相關標籤/搜索