你真的知道什么是多线程吗?为什么要学习多线程?
文章目錄
- 1、多線程的含義
- 2、原理
- 3、優勢
- 4、線程與進程的區別
- 5、線程與多線程的區別
- 6、線程調度的分類
- 7、同步與異步
- 8、并發與并行
- 9、為什么要使用線程池
- 10、線程池的好處
- 11、線程池的分類
- 12、意義
1、多線程的含義
多線程(multithreading),是指從軟件或者硬件上實現多個線程并發執行的技術。具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多于一個線程,進而提升整體處理性能。具有這種能力的系統包闊對稱處理機、多核心處理器以及芯片級多處理或同時多線程處理器。在一個程序中,這些獨立運行的程序片段叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理”。
2、原理
多線程就是把操作系統中的這種并發執行機制原理運用在一個程序中,把一個程序劃分為若干個子任務,多個子任務并發執行,每一個任務就是一個線程。
實現多線程是采用一種并發執行機制。
3、優勢
1、方便的通信和數據交換
2、更高效地利用CPU
4、線程與進程的區別
線程 是進程中的一個執行路徑,共享一個內存空間,線程之間可以自由切換,并發執行. 一個進程最少 有一個線程,線程實際上是在進程基礎之上的進一步劃分,一個進程啟動之后,里面的若干執行路徑又可以劃分成若干個線程。
進程 是指一個內存中運行的應用程序,每個進程都有一個獨立的內存空間
5、線程與多線程的區別
線程是系統對代碼的執行進程,如果將系統當做一個員工,被安排執行某個任務的時候,他不會對任何其他的任務作出響應。只有當這個任務執行完畢,才可以重新給他分配任務。一個程序都有一個主線程,負責執行程序必要的任務 。
當我們處理一個消耗大的任務(如上傳或下載圖片),如果讓主線程執行這個任務,它會等到動作完成,才繼續后面的代碼。在這段時間之內,主線程處于“忙碌”狀態,也就是無法執行任何其他功能。體現在界面上就是,用戶的界面完全“卡死” 。
多線程是指,將原本線性執行的任務分開成若干個子任務同步執行,這樣做的優點是防止線程“堵塞”,增強用戶體驗和程序的效率。缺點是代碼的復雜程度會大大提高,而且對于硬件的要求也相應地提高。
6、線程調度的分類
(1)分時調度
所有線程輪流使用 CPU 的使用權,平均分配每個線程占用 CPU 的時間。
(2)搶占式調度 (常用)
優先讓優先級高的線程使用 CPU,如果線程的優先級相同,那么會隨機選擇一個(線程隨機性), Java使用的為CPU使用搶占式調度模式在多個線程間進行著高速的切換。對于CPU的一個核新而言,某個時刻, 只能執行一個線程,而 CPU的在多個線程間切換速度相對我們的感覺要快,看上去就是 在同一時 刻運行。 其實,多線程程序并不能提高程序的運行速度,但能夠提高程序運行效率,讓CPU的 使用率更高。
7、同步與異步
同步:排隊執行 , 效率低但是安全.
異步:同時執行 , 效率高但是數據不安全
8、并發與并行
并發:指兩個或多個事件在同一個時間段內發生。
并行:指兩個或多個事件在同一時刻發生(同時發生)。
9、為什么要使用線程池
? 如果并發的線程數量很多,并且每個線程都是執行一個時間很短的任務就結束了,這樣頻繁創建線程就會大大降低 系統的效率,因為頻繁創建線程和銷毀線程需要時間. 線程池就是一個容納多個線程的容 器,池中的線程可以反復使用,省去了頻繁創建線程對象的操作,節省了大量的時間和資源。
10、線程池的好處
- 降低資源消耗。
- 提高響應速度。
- 提高線程的可管理性。
11、線程池的分類
(1)緩存線程池:長度無限制
執行流程 :
- 判斷線程池是否存在空閑線程
- 存在則使用
- 不存在,則創建線程 并放入線程池, 然后使用
2. 定長線程池 : 長度是指定的數值
執行流程 :
- 判斷線程池是否存在空閑線程
- 存在則使用
- 不存在空閑線程,且線程池未滿的情況下,則創建線程 并放入線程池, 然后使用
- 不存在空閑線程,且線程池已滿的情況下,則等待線程池存在空閑線程
12、意義
無論是過去還是現在,世界上大多數計算機仍然采用的是馮·諾依曼結構,這種結構的特點就是順序處理,一個處理器在同個時刻只能處理一件事情。 Windows 95/NT采用一種全新的任務調度策略,它把一個進程劃分為多個線程,每個線程輪流占用CPU的運算時間,操作系統不斷地把線程掛起、喚醒、再掛起、再喚程,如此反復,由于現在CPU的速度比較快,給人的感覺是多個線程在同時執行,就好像有多個CPU存在于計算機中一樣。
總結
以上是生活随笔為你收集整理的你真的知道什么是多线程吗?为什么要学习多线程?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java生日正则表达式_Java编程基础
- 下一篇: 趣学python3(38)--多项式最小