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