一、進(jìn)程和線程
1??【進(jìn)程Process】是Windows系統(tǒng)中的一個(gè)基本概念兔乞,它包含著一個(gè)運(yùn)行程序所需要的資源汇鞭。一個(gè)正在運(yùn)行的應(yīng)用程序在操作系統(tǒng)中被視為一個(gè)進(jìn)程,進(jìn)程可以包括一個(gè)或多個(gè)線程庸追。
進(jìn)程之間是相對獨(dú)立的霍骄,一個(gè)進(jìn)程無法訪問另一個(gè)進(jìn)程的數(shù)據(jù)(除非利用分布式計(jì)算方式),一個(gè)進(jìn)程運(yùn)行的失敗也不會(huì)影響其他進(jìn)程的運(yùn)行淡溯,Windows系統(tǒng)就是利用進(jìn)程把工作劃分為多個(gè)獨(dú)立的區(qū)域的读整。進(jìn)程可以理解為一個(gè)程序的基本邊界。是應(yīng)用程序的一個(gè)運(yùn)行例程咱娶,是應(yīng)用程序的一次動(dòng)態(tài)執(zhí)行過程米间。
2??【線程Thread】是進(jìn)程中的基本執(zhí)行單元,是操作系統(tǒng)分配CPU時(shí)間的基本單位膘侮,一個(gè)進(jìn)程可以包含若干個(gè)線程屈糊,在進(jìn)程入口執(zhí)行的第一個(gè)線程被視為這個(gè)進(jìn)程的主線程。線程主要是由CPU寄存器琼了、調(diào)用棧和線程本地存儲器(Thread Local Storage逻锐,TLS)組成的。CPU寄存器主要記錄當(dāng)前所執(zhí)行線程的狀態(tài)表伦,調(diào)用棧主要用于維護(hù)線程所調(diào)用到的內(nèi)存與數(shù)據(jù)谦去,TLS主要用于存放線程的狀態(tài)信息。
3??進(jìn)程和線程的區(qū)別
進(jìn)程和線程的主要差別在于它們是操作系統(tǒng)不同的資源管理方式蹦哼。進(jìn)程有獨(dú)立的地址空間鳄哭,一個(gè)進(jìn)程崩潰后,在保護(hù)模式下不會(huì)對其它進(jìn)程產(chǎn)生影響纲熏,而線程只是一個(gè)進(jìn)程中的不同執(zhí)行路徑妆丘。
4??小結(jié)
線程有自己的堆棧和局部變量,但線程之間沒有單獨(dú)的地址空間局劲,一個(gè)線程死掉就等于整個(gè)進(jìn)程死掉勺拣,所以多進(jìn)程的程序要比多線程的程序健壯,但在進(jìn)程切換時(shí)鱼填,耗費(fèi)資源較大药有,效率要差一些。但對于一些要求同時(shí)進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程愤惰,不能用進(jìn)程苇经。
- 一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程宦言。
- 線程的劃分尺度小于進(jìn)程扇单,使得多線程程序的并發(fā)性高。
- 進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元奠旺,而多個(gè)線程共享內(nèi)存蜘澜,從而極大地提高了程序的運(yùn)行效率。
- 線程在執(zhí)行過程中與進(jìn)程還是有區(qū)別的响疚。每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口鄙信、順序執(zhí)行序列和程序的出口。但是線程不能夠獨(dú)立執(zhí)行稽寒,必須依存在應(yīng)用程序中扮碧,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制趟章。
- 從邏輯角度來看杏糙,多線程的意義在于一個(gè)應(yīng)用程序中,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行蚓土。但操作系統(tǒng)并沒有將多個(gè)線程看做多個(gè)獨(dú)立的應(yīng)用宏侍,來實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。這就是進(jìn)程和線程的重要區(qū)別蜀漆。
二谅河、同步Sync和異步Async
1??同步:所謂同步,就是發(fā)出一個(gè)功能調(diào)用時(shí)确丢,在沒有得到結(jié)果之前绷耍,該調(diào)用就不返回或不能繼續(xù)執(zhí)行后續(xù)操作。簡單來說鲜侥,同步就是必須一件一件事做褂始,等前一件做完了才能做下一件事。
例如:B/S 模式中的表單提交描函,具體過程是:客戶端提交請求->等待服務(wù)器處理->處理完畢返回崎苗,在這個(gè)過程中客戶端(瀏覽器)不能做其他事。
2??異步:異步與同步相對舀寓,當(dāng)一個(gè)異步過程調(diào)用發(fā)出后胆数,調(diào)用者在沒有得到結(jié)果之前,就可以繼續(xù)執(zhí)行后續(xù)操作互墓。當(dāng)這個(gè)調(diào)用完成后必尼,一般通過狀態(tài)、通知和回調(diào)來通知調(diào)用者篡撵。對于異步調(diào)用判莉,調(diào)用的返回并不受調(diào)用者控制齿诞。
對于通知調(diào)用者的三種方式,具體如下:
- 狀態(tài):即監(jiān)聽被調(diào)用者的狀態(tài)(輪詢)骂租,調(diào)用者需要每隔一定時(shí)間檢查一次祷杈,效率會(huì)很低。
- 通知:當(dāng)被調(diào)用者執(zhí)行完成后渗饮,發(fā)出通知告知調(diào)用者但汞,無需消耗太多性能。
-
回調(diào):與通知類似互站,當(dāng)被調(diào)用者執(zhí)行完成后私蕾,會(huì)調(diào)用調(diào)用者提供的回調(diào)函數(shù)。
例如:B/S 模式中的 ajax 請求胡桃,具體過程是:客戶端發(fā)出 ajax 請求--->服務(wù)端處理--->處理完畢執(zhí)行客戶端回調(diào)踩叭。在客戶端(瀏覽器)發(fā)出請求后,仍然可以做其他的事翠胰。
3??同步和異步的區(qū)別:請求發(fā)出后容贝,是否需要等待結(jié)果,才能繼續(xù)執(zhí)行其他操作之景。
三斤富、阻塞和非阻塞
這兩個(gè)概念與程序(線程)等待消息通知(無所謂同步或者異步)時(shí)的狀態(tài)有關(guān)。也就是說阻塞與非阻塞主要是從程序(線程)等待消息通知時(shí)的狀態(tài)角度來說的锻狗。阻塞和非阻塞關(guān)注的是程序在等待調(diào)用結(jié)果(消息满力,返回值)時(shí)的狀態(tài)。阻塞調(diào)用是指調(diào)用結(jié)果返回之前轻纪,當(dāng)前線程會(huì)被掛起油额。調(diào)用線程只有在得到結(jié)果之后才會(huì)返回。非阻塞調(diào)用指在不能立刻得到結(jié)果之前刻帚,該調(diào)用不會(huì)阻塞當(dāng)前線程潦嘶。
四、并發(fā)和并行
1??并發(fā):在操作系統(tǒng)中我擂,是指同一個(gè)時(shí)間段中有幾個(gè)程序都處于已啟動(dòng)運(yùn)行到運(yùn)行完畢之間衬以,且這幾個(gè)程序都是在同一個(gè)處理機(jī)上運(yùn)行,但任一個(gè)時(shí)刻點(diǎn)上只有一個(gè)程序在處理機(jī)上運(yùn)行校摩。
當(dāng)有多個(gè)線程在操作時(shí)看峻,如果系統(tǒng)只有一個(gè) CPU,則它根本不可能真正同時(shí)進(jìn)行一個(gè)以上的線程衙吩,它只能把 CPU 運(yùn)行時(shí)間劃分成若干個(gè)時(shí)間段互妓,再將時(shí)間段分配給各個(gè)線程執(zhí)行,在一個(gè)時(shí)間段的線程代碼運(yùn)行時(shí),其它線程處于掛起狀冯勉。這種方式稱之為并發(fā)(Concurrent)澈蚌。
2??并行:當(dāng)系統(tǒng)有一個(gè)以上 CPU 時(shí),則線程的操作有可能非并發(fā)灼狰。當(dāng)一個(gè) CPU 執(zhí)行一個(gè)線程時(shí)宛瞄,另一個(gè) CPU 可以執(zhí)行另一個(gè)線程,兩個(gè)線程互不搶占 CPU 資源交胚,可以同時(shí)進(jìn)行份汗,這種方式稱之為并行(Parallel)。
3??并發(fā)和并行的區(qū)別:
你吃飯吃到一半蝴簇,電話來了杯活,你一直到吃完了以后才去接,這就說明你不支持并發(fā)也不支持并行熬词。
你吃飯吃到一半旁钧,電話來了,你停了下來接了電話互拾,接完后繼續(xù)吃飯歪今,這說明你支持并發(fā)。
你吃飯吃到一半摩幔,電話來了彤委,你一邊打電話一邊吃飯鞭铆,這說明你支持并行或衡。
并發(fā)的關(guān)鍵是你有處理多個(gè)任務(wù)的能力,指同一時(shí)間段運(yùn)行多個(gè)程序车遂,不一定要同時(shí)封断。并行的關(guān)鍵是你有同時(shí)處理多個(gè)任務(wù)的能力,強(qiáng)調(diào)的是同一個(gè)時(shí)間點(diǎn)并行運(yùn)行舶担,指的是同一時(shí)刻坡疼。很顯然,并行要求需要多核衣陶,而并發(fā)可以單核切換運(yùn)行程序柄瑰,由于 cpu 的高速運(yùn)轉(zhuǎn),所以看起來并發(fā)很類似并行執(zhí)行剪况,但是本質(zhì)上兩者是不同的教沾。
五、異步和多線程區(qū)別(原理篇)
1??異步和多線程的區(qū)別
異步是目的译断,多線程是實(shí)現(xiàn)該目的的方法授翻。異步是說,A 發(fā)起一個(gè)操作后(一般都是比較耗時(shí)的操作,如果不耗時(shí)的操作就沒有必要異步了)堪唐,可以繼續(xù)自顧自的處理它自己的事情巡语,不用干等著這個(gè)耗時(shí)操作返回。
2??多線程和異步操作的異同
多線程和異步操作兩者都可以達(dá)到避免調(diào)用線程阻塞的目的淮菠,從而提高軟件的可響應(yīng)性男公。甚至有些時(shí)候就認(rèn)為多線程和異步操作是等同的概念。但是合陵,多線程和異步操作還是有一些區(qū)別的理澎。而這些區(qū)別造成了使用多線程和異步操作的時(shí)機(jī)的區(qū)別。
3??異步操作的本質(zhì)
所有的程序最終都會(huì)由計(jì)算機(jī)硬件來執(zhí)行曙寡,所以為了更好的理解異步操作的本質(zhì)糠爬,有必要了解一下它的硬件基礎(chǔ)。硬盤举庶、光驅(qū)的技術(shù)規(guī)格中都有明確DMA的模式指標(biāo)执隧,其實(shí)網(wǎng)卡、聲卡户侥、顯卡也是有DMA功能的镀琉。
DMA就是直接內(nèi)存訪問的意思,也就是說蕊唐,擁有DMA功能的硬件在和內(nèi)存進(jìn)行數(shù)據(jù)交換的時(shí)候可以不消耗CPU資源屋摔。只要CPU在發(fā)起數(shù)據(jù)傳輸時(shí)發(fā)送一個(gè)指令,硬件就開始自己和內(nèi)存交換數(shù)據(jù)替梨,在傳輸完成之后硬件會(huì)觸發(fā)一個(gè)中斷來通知操作完成钓试。這些無須消耗CPU時(shí)間的I/O操作正是異步操作的硬件基礎(chǔ)。所以即使在DOS 這樣的單進(jìn)程(而且無線程概念)系統(tǒng)中也同樣可以發(fā)起異步的DMA操作副瀑。
4??線程的本質(zhì)
線程不是一個(gè)計(jì)算機(jī)硬件的功能弓熏,而是操作系統(tǒng)提供的一種邏輯功能,線程本質(zhì)上是進(jìn)程中一段并發(fā)運(yùn)行的代碼糠睡,所以線程需要操作系統(tǒng)投入 CPU 資源來運(yùn)行和調(diào)度挽鞠。
5??異步操作的優(yōu)缺點(diǎn)
因?yàn)楫惒讲僮鳠o須額外的線程負(fù)擔(dān),并且使用回調(diào)的方式進(jìn)行處理狈孔,在設(shè)計(jì)良好的情況下信认,處理函數(shù)可以不必使用共享變量(即使無法完全不用,最起碼可以減少共享變量的數(shù)量)均抽,減少了死鎖的可能嫁赏。當(dāng)然異步操作也并非完美無暇。編寫異步操作的復(fù)雜程度較高到忽,程序主要使用回調(diào)方式進(jìn)行處理橄教,與普通人的思維方式有些出入清寇,而且難以調(diào)試。
6??多線程的優(yōu)缺點(diǎn)
多線程的優(yōu)點(diǎn)很明顯护蝶,線程中的處理程序依然是順序執(zhí)行华烟,符合普通人的思維習(xí)慣,所以編程簡單持灰。但是多線程的缺點(diǎn)也同樣明顯盔夜,線程的使用(濫用)會(huì)給系統(tǒng)帶來上下文切換的額外負(fù)擔(dān)。并且線程間的共享變量可能造成死鎖的出現(xiàn)堤魁。
多線程意義:
有時(shí)程序需要在特定時(shí)間做特定的事情喂链。比如有一個(gè)可見窗口的程序。該程序可能正在進(jìn)行大量的后臺數(shù)字運(yùn)算妥泉,但是它仍然可以響應(yīng)用戶事件(例如單擊按鈕并調(diào)整其大小)椭微,這種情況可以通過異步處理來完成,異步處理將需要一個(gè)線程重復(fù)檢查 GUI 工作是否間隔執(zhí)行盲链,暫停正在執(zhí)行的操作以及處理 GUI 一段時(shí)間蝇率。許多事情都是通過這種方式完成的。
然而刽沾,處理它的另一種可能更好的方法是使用線程本慕。無需擔(dān)心該程序在邏輯運(yùn)算和 GUI 管理之間來回切換,操作系統(tǒng)將自行管理侧漓。即使只有一個(gè)內(nèi)核锅尘,仍然可以運(yùn)行多個(gè)線程,并且操作系統(tǒng)將盡最大努力確保所有正在運(yùn)行的進(jìn)程中的所有正在運(yùn)行的線程都能公平分配 CPU 時(shí)間布蔗。
六藤违、理解異步,多線程和并行的區(qū)別
沒有 12306 的時(shí)候何鸡,買票只能去火車站買纺弊。因?yàn)槎家^年回家,都還不想等骡男,火車站只有一個(gè),窗口只有那么多傍睹,頭疼啊隔盛。更頭疼的是,排到窗口的那個(gè)人拾稳,各種挑剔吮炕,不要貴的,不要晚上的访得,不要站票……跟售票員各種墨跡龙亲,后面的人更加著急陕凹。
現(xiàn)在假設(shè)整個(gè)城市就只有一列火車,一個(gè)售票員鳄炉,每個(gè)乘客咨詢售票員后需要思考一分鐘再?zèng)Q定買哪趟車的票杜耙。
異步:在買票的人咨詢后,需要思考一分鐘拂盯,馬上靠邊站佑女,但不用重新排隊(duì),什么時(shí)候想清楚可以立馬去跟售票員去買票谈竿。在該人站在旁邊思考的時(shí)候团驱,后面的人趕緊上去接著買。這時(shí)候隊(duì)伍是很快的挪動(dòng)的空凸,沒有阻塞嚎花,售票員的最大化的效率。
多線程:火車站開 n 個(gè)窗口(但還是只有一個(gè)人售票)呀洲,外面同時(shí)排 n 個(gè)隊(duì)贩幻,售票員回答咨詢者問題后,立馬馬上去下個(gè)窗口两嘴,然后繼續(xù)輪換到下個(gè)窗口…..哪個(gè)窗口的人決定好了丛楚,售票員立馬過去賣給他。這個(gè)時(shí)候乘客比較簡單憔辫,但萬一那個(gè)隊(duì)伍有人思考半天糾結(jié)趣些,后面的人就悲劇了。
并行:復(fù)制 n 個(gè)火車站贰您,同時(shí)賣票坏平,能力大大增強(qiáng)。大家也可以哪個(gè)火車站人少锦亦,就去那個(gè)買票舶替。
可見:在只有一個(gè)火車站,且只有一個(gè)售票員的情況下杠园,賣完一個(gè)再賣一個(gè)就會(huì)導(dǎo)致資源浪費(fèi)顾瞪,效率低下,隊(duì)伍卡死抛蚁,很難往前挪動(dòng)陈醒。1/2 優(yōu)化的辦法都解決了隊(duì)伍不動(dòng),售票率低下的問題瞧甩。但增加火車站钉跷,增加窗口,增加售票員才是好辦法肚逸。
結(jié)論:
異步和多線程其實(shí)效率差不多爷辙,但是開的窗口不多例如三個(gè)彬坏,同時(shí)有很多人都是去花五分鐘,而不是一分鐘去糾結(jié)的時(shí)候膝晾,多線程效率實(shí)際是低于異步的栓始,因?yàn)槭燮眴T還是常遇到三個(gè)隊(duì)伍同時(shí)卡在那糾結(jié)不能買票的時(shí)候。
這兩個(gè)概念拿來對比也有點(diǎn)不合適玷犹,因?yàn)椴皇且粋€(gè)維度混滔,多線程的目的還是為了實(shí)現(xiàn)異步,多線程應(yīng)該是一種實(shí)現(xiàn)異步的手段歹颓。異步應(yīng)該去跟同步比較才對坯屿。
多線程比較簡單,但需要增設(shè)窗口巍扛,增加成本领跛,且售票員比較累。
并行撤奸,類似同時(shí)利用多核 cpu 的各個(gè)核去計(jì)算吠昭。并發(fā)可分為偽并發(fā)、真并發(fā)胧瓜。前者例如單核處理器的并發(fā)矢棚,后者發(fā)是指多核處理器的并發(fā)。
終極辦法是并行計(jì)算府喳,并且每個(gè) cpu 下進(jìn)行異步計(jì)算蒲肋,這樣每個(gè)核都充分利用。只不過對編程要求很高钝满,如果不是密集型計(jì)算兜粘,例如大型有限元計(jì)算(多采用并發(fā)),或者服務(wù)器同時(shí)處理上千的訪問(多采用異步或者多線程)弯蚜,還是老老實(shí)實(shí)的用傳統(tǒng)的辦法吧孔轴,畢竟常規(guī)程序的計(jì)算量對現(xiàn)在的硬件來說,問題都不大碎捺。
七路鹰、理解同步阻塞、同步非阻塞牵寺、異步阻塞悍引、異步阻塞、異步非阻塞
同步/異步關(guān)注的是消息通知的機(jī)制帽氓,而阻塞/非阻塞關(guān)注的是程序(線程)等待消息通知時(shí)的狀態(tài)。
以小明下載文件打個(gè)比方俩块,從這兩個(gè)關(guān)注點(diǎn)來再次說明這兩組概念:
1??同步阻塞:小明一直盯著下載進(jìn)度條黎休,到 100% 的時(shí)候就完成浓领。
同步體現(xiàn)在:等待下載完成通知;
阻塞體現(xiàn)在:等待下載完成通知過程中势腮,不能做其他任務(wù)處理联贩;
2??同步非阻塞:小明提交下載任務(wù)后就去干別的,每過一段時(shí)間就去瞄一眼進(jìn)度條捎拯,看到 100% 就完成泪幌。
同步體現(xiàn)在:等待下載完成通知;
非阻塞體現(xiàn)在:等待下載完成通知過程中署照,去干別的任務(wù)了祸泪,只是時(shí)不時(shí)會(huì)瞄一眼進(jìn)度條;小明必須要在兩個(gè)任務(wù)間切換建芙,關(guān)注下載進(jìn)度没隘。
3??異步阻塞:小明換了個(gè)有下載完成通知功能的軟件,下載完成就“督”一聲右蒲。不過小明仍然一直等待“叮”的聲音赶熟。
異步體現(xiàn)在:下載完成“豆逋”一聲通知;
阻塞體現(xiàn)在:等待下載完成“队匙”一聲通知過程中间坐,不能做其他任務(wù)處理;
4??異步非阻塞:仍然是那個(gè)會(huì)“栋⊙耄”一聲的下載軟件眶诈,小明提交下載任務(wù)后就去干別的,聽到“豆霞ⅲ”的一聲就知道完成了逝撬。
異步體現(xiàn)在:下載完成“叮”一聲通知乓土;
非阻塞體現(xiàn)在:等待下載完成“断艹保”一聲通知過程中,去干別的任務(wù)了趣苏,只需要接收“督葡啵”聲通知即可;軟件處理下載任務(wù)食磕,小明處理其他任務(wù)尽棕,不需關(guān)注進(jìn)度,只需接收軟件“侗蚵祝”聲通知滔悉,即可伊诵。
也就是說,同步/異步是“下載完成消息”通知的方式(機(jī)制)回官,而阻塞/非阻塞則是在等待“下載完成消息”通知過程中的狀態(tài)(能不能干其他任務(wù))曹宴,在不同的場景下,同步/異步歉提、阻塞/非阻塞的四種組合都有應(yīng)用笛坦。
綜上所述,同步和異步僅僅是關(guān)注的消息如何通知的機(jī)制苔巨,而阻塞與非阻塞關(guān)注的是等待消息通知時(shí)的狀態(tài)版扩。也就是說,同步的情況下恋拷,是由處理消息者自己去等待消息是否被觸發(fā)资厉,而異步的情況下是由觸發(fā)機(jī)制來通知處理消息者,所以在異步機(jī)制中蔬顾,處理消息者和觸發(fā)機(jī)制之間就需要一個(gè)連接的橋梁宴偿。在小明的例子中,這個(gè)橋梁就是軟件“毒骰恚”的聲音窄刘。
1??同步阻塞形式:效率是最低的。
拿上面的例子來說舷胜,就是專心等待下載完成娩践,什么別的事都不做。實(shí)際程序中:就是未對 fd 設(shè)置 O_NONBLOCK 標(biāo)志位的 read/write 操作烹骨;
2??異步阻塞形式:異步操作是可以被阻塞住的翻伺,只不過它不是在處理消息時(shí)阻塞,而是在等待消息通知時(shí)被阻塞沮焕。
比如 select 函數(shù)吨岭,假如傳入的最后一個(gè) timeout 參數(shù)為 NULL,那么如果所關(guān)注的事件沒有一個(gè)被觸發(fā)峦树,程序就會(huì)一直阻塞在這個(gè) select 調(diào)用處辣辫。
3??同步非阻塞形式:實(shí)際上是效率低下的。
想象一下一邊干別的事情一邊還需要抬頭看下載完成沒有魁巩,如果把干別的事情和觀察下載完成情況的位置看成是程序的兩個(gè)操作的話急灭,這個(gè)程序需要在這兩種不同的行為之間來回的切換,效率可想而知是低下的谷遂。
很多人會(huì)寫阻塞的 read/write 操作葬馋,但是別忘了可以對 fd 設(shè)置 O_NONBLOCK 標(biāo)志位,這樣就可以將同步操作變成非阻塞的了。
4??異步非阻塞形式:效率更高点楼。
因?yàn)榈却螺d完成是等待者的事情扫尖,而通知?jiǎng)t是電腦(消息觸發(fā)機(jī)制)的事情白对,程序沒有在兩種不同的操作中來回切換掠廓。
八、多核
具有多個(gè)邏輯 CPU 內(nèi)核并且可以物理上同時(shí)執(zhí)行多條指令的計(jì)算機(jī)的處理器甩恼。計(jì)算機(jī)的“核心數(shù)”是計(jì)算機(jī)擁有的核心總數(shù)蟀瞧。計(jì)算機(jī)可能具有多個(gè)處理器,每個(gè)處理器可能具有多個(gè)核心条摸;核心數(shù)是所有處理器上的核心總數(shù)悦污。
多核的優(yōu)勢
多核技術(shù)具有超線程技術(shù)的所有優(yōu)點(diǎn)并且具有更多的優(yōu)勢。超線程技術(shù)為每個(gè)物理內(nèi)核使用兩個(gè)虛擬內(nèi)核來更有效地處理任務(wù)钉蒲,而多內(nèi)核技術(shù)則增加了物理內(nèi)核切端。由于單個(gè)物理核心比單個(gè)虛擬核心更強(qiáng)大,因此雙核處理器比具有超線程的單核處理器更強(qiáng)大顷啼。許多較新的型號CPU是超線程和多核的踏枣,從而實(shí)現(xiàn)了更高的性能。
多線程和多核關(guān)系
首先兩者本質(zhì)上沒有必然的聯(lián)系钙蒙,多線程可以運(yùn)行在單核上茵瀑,也可以運(yùn)行在多核上。一個(gè)線程可以某一時(shí)間段在一個(gè)核心上運(yùn)行躬厌,下一刻在另一個(gè)核心上運(yùn)行马昨。
線程是內(nèi)核調(diào)度的最小單位。一個(gè)進(jìn)程可以有多個(gè)線程扛施,它們共同完成某個(gè)任務(wù)鸿捧。線程是被包裹在進(jìn)程中的,進(jìn)程提供了線程運(yùn)行的資源疙渣。
進(jìn)程之間互不影響匙奴,一個(gè)進(jìn)程掛掉,并不影響其它進(jìn)程昌阿,然而一個(gè)進(jìn)程內(nèi)的一個(gè)線程出現(xiàn)問題 饥脑,其它線程也無法正常運(yùn)行。
九懦冰、CPU
CPU也叫內(nèi)核灶轰,是由單晶硅以一定的生產(chǎn)工藝制造出來的,CPU所有的計(jì)算刷钢、接受/存儲命令笋颤、處理數(shù)據(jù)都由核心執(zhí)行。
CPU執(zhí)行多個(gè)程序靠的是它的時(shí)鐘,通過時(shí)鐘中斷伴澄,它可以在不同的程序之間切換赋除,這樣看上去,我們的程序就彷佛在并行執(zhí)行非凌。
十举农、超線程技術(shù)
超線程技術(shù)為CPU中存在的每個(gè)物理核心創(chuàng)建兩個(gè)虛擬處理核心宽菜。物理核心為虛擬核心提供動(dòng)力突颊,然后虛擬核心承擔(dān)任務(wù)處理的責(zé)任。每個(gè)虛擬內(nèi)核都彼此相同铺董,盡管兩者都不像物理內(nèi)核那么強(qiáng)大喉悴,但是當(dāng)不啟用HT時(shí)棱貌,它們合起來遠(yuǎn)遠(yuǎn)超過了物理內(nèi)核的能力。這些虛擬內(nèi)核的使用使CPU可以實(shí)時(shí)在內(nèi)核之間委派任務(wù)箕肃。
超線程的優(yōu)點(diǎn)
由CPU密集型操作(例如同時(shí)運(yùn)行兩個(gè)苛刻的程序)創(chuàng)建的工作負(fù)載(該操作會(huì)降低單個(gè)物理核心的運(yùn)行速度婚脱,而不論其原始功率如何)都會(huì)在處理器的虛擬核心之間分配利用HT技術(shù)。使用兩個(gè)虛擬內(nèi)核同時(shí)處理任務(wù)勺像,處理時(shí)間更短障贸,程序打開速度更快,并且在多任務(wù)處理期間您的計(jì)算機(jī)將保持更高的響應(yīng)速度咏删。簡而言之惹想,超線程可提高處理效率。