亚洲全黄无码一级在线看_国产剧情久久久性色_无码av一区二区三区无码_亚洲成a×人片在线观看

當(dāng)前位置: 首頁(yè) > 軍事新聞 >

進(jìn)程線程面試題總結(jié)

時(shí)間:2020-07-14 17:32來(lái)源:網(wǎng)絡(luò)整理 瀏覽:
1.什么是進(jìn)程?什么是線程?進(jìn)程是表示資源分配的基本單位,又是調(diào)度運(yùn)行的基本單位。例如,用戶運(yùn)行自己的程序,系統(tǒng)就創(chuàng)建一個(gè)進(jìn)程,并為它分配資
1.什么是進(jìn)程?什么是線程?


進(jìn)程線程面試題總結(jié)


進(jìn)程是表示資源分配的基本單位,又是調(diào)度運(yùn)行的基本單位。例如,用戶運(yùn)行自己的程序,系統(tǒng)就創(chuàng)建一個(gè)進(jìn)程,并為它分配資源,包括各種表格、內(nèi)存空間、磁盤(pán)空間、I/O設(shè)備等。然后,把該進(jìn)程放人進(jìn)程的就緒隊(duì)列。進(jìn)程調(diào)度程序選中它,為它分配CPU以及其它有關(guān)資源,該進(jìn)程才真正運(yùn)行。所以,進(jìn)程是系統(tǒng)中的并發(fā)執(zhí)行的單位。

在Mac、Windows NT等采用微內(nèi)核結(jié)構(gòu)的操作系統(tǒng)中,進(jìn)程的功能發(fā)生了變化:它只是資源分配的單位,而不再是調(diào)度運(yùn)行的單位。在微內(nèi)核系統(tǒng)中,真正調(diào)度運(yùn)行的基本單位是線程。因此,實(shí)現(xiàn)并發(fā)功能的單位是線程。

線程概念

  線程是進(jìn)程中執(zhí)行運(yùn)算的最小單位,亦即執(zhí)行處理機(jī)調(diào)度的基本單位。如果把進(jìn)程理解為在邏輯上操作系統(tǒng)所完成的任務(wù),那么線程表示完成該任務(wù)的許多可能的子任務(wù)之一。例如,假設(shè)用戶啟動(dòng)了一個(gè)窗口中的數(shù)據(jù)庫(kù)應(yīng)用程序,操作系統(tǒng)就將對(duì)數(shù)據(jù)庫(kù)的調(diào)用表示為一個(gè)進(jìn)程。假設(shè)用戶要從數(shù)據(jù)庫(kù)中產(chǎn)生一份工資單報(bào)表,并傳到一個(gè)文件中,這是一個(gè)子任務(wù);在產(chǎn)生工資單報(bào)表的過(guò)程中,用戶又可以輸人數(shù)據(jù)庫(kù)查詢請(qǐng)求,這又是一個(gè)子任務(wù)。這樣,操作系統(tǒng)則把每一個(gè)請(qǐng)求――工資單報(bào)表和新輸人的數(shù)據(jù)查詢表示為數(shù)據(jù)庫(kù)進(jìn)程中的獨(dú)立的線程。線程可以在處理器上獨(dú)立調(diào)度執(zhí)行,這樣,在多處理器環(huán)境下就允許幾個(gè)線程各自在單獨(dú)處理器上進(jìn)行。操作系統(tǒng)提供線程就是為了方便而有效地實(shí)現(xiàn)這種并發(fā)性。

舉個(gè)例子來(lái)說(shuō)多線程就像是火車上的每節(jié)車廂,而進(jìn)程就是火車。

2.多進(jìn)程和多線程的區(qū)別?

我們從各個(gè)方面來(lái)看待這個(gè)問(wèn)題,由下面的圖片說(shuō)明:


進(jìn)程線程面試題總結(jié)

3.進(jìn)程之間的通信方式以及優(yōu)缺點(diǎn)?

1)管道

管道分為有名管道和無(wú)名管道

無(wú)名管道是一種半雙工的通信方式,數(shù)據(jù)只能單向流動(dòng),而且只能在具有親緣關(guān)系的進(jìn)程間使用.進(jìn)程的親緣關(guān)系一般指的是父子關(guān)系。無(wú)明管道一般用于兩個(gè)不同進(jìn)程之間的通信。當(dāng)一個(gè)進(jìn)程創(chuàng)建了一個(gè)管道,并調(diào)用fork創(chuàng)建自己的一個(gè)子進(jìn)程后,父進(jìn)程關(guān)閉讀管道端,子進(jìn)程關(guān)閉寫(xiě)管道端,這樣提供了兩個(gè)進(jìn)程之間數(shù)據(jù)流動(dòng)的一種方式。

有名管道也是一種半雙工的通信方式,但是它允許無(wú)親緣關(guān)系進(jìn)程間的通信。

無(wú)名管道:優(yōu)點(diǎn):簡(jiǎn)單方便;缺點(diǎn):1)局限于單向通信2)只能創(chuàng)建在它的進(jìn)程以及其有親緣關(guān)系的進(jìn)程之間;3)緩沖區(qū)有限;

有名管道:優(yōu)點(diǎn):可以實(shí)現(xiàn)任意關(guān)系的進(jìn)程間的通信;缺點(diǎn):1)長(zhǎng)期存于系統(tǒng)中,使用不當(dāng)容易出錯(cuò);2)緩沖區(qū)有限

2)信號(hào)量

信號(hào)量是一個(gè)計(jì)數(shù)器,可以用來(lái)控制多個(gè)線程對(duì)共享資源的訪問(wèn).,它不是用于交換大批數(shù)據(jù),而用于多線程之間的同步.它常作為一種鎖機(jī)制,防止某進(jìn)程在訪問(wèn)資源時(shí)其它進(jìn)程也訪問(wèn)該資源.因此,主要作為進(jìn)程間以及同一個(gè)進(jìn)程內(nèi)不同線程之間的同步手段.

優(yōu)點(diǎn):可以同步進(jìn)程;缺點(diǎn):信號(hào)量有限

3)信號(hào)

信號(hào)是一種比較復(fù)雜的通信方式,用于通知接收進(jìn)程某個(gè)事件已經(jīng)發(fā)生.

4)消息隊(duì)列

消息隊(duì)列是消息的鏈表,存放在內(nèi)核中并由消息隊(duì)列標(biāo)識(shí)符標(biāo)識(shí).消息隊(duì)列克服了信號(hào)傳遞信息少,管道只能承載無(wú)格式字節(jié)流以及緩沖區(qū)大小受限等特點(diǎn).消息隊(duì)列是UNIX下不同進(jìn)程之間可實(shí)現(xiàn)共享資源的一種機(jī)制,UNIX允許不同進(jìn)程將格式化的數(shù)據(jù)流以消息隊(duì)列形式發(fā)送給任意進(jìn)程.對(duì)消息隊(duì)列具有操作權(quán)限的進(jìn)程都可以使用msget完成對(duì)消息隊(duì)列的操作控制.通過(guò)使用消息類型,進(jìn)程可以按任何順序讀信息,或?yàn)橄才艃?yōu)先級(jí)順序.

優(yōu)點(diǎn):可以實(shí)現(xiàn)任意進(jìn)程間的通信,并通過(guò)系統(tǒng)調(diào)用函數(shù)來(lái)實(shí)現(xiàn)消息發(fā)送和接收之間的同步,無(wú)需考慮同步問(wèn)題,方便;缺點(diǎn):信息的復(fù)制需要額外消耗CPU的時(shí)間,不適宜于信息量大或操作頻繁的場(chǎng)合


5)共享內(nèi)存

共享內(nèi)存就是映射一段能被其他進(jìn)程所訪問(wèn)的內(nèi)存,這段共享內(nèi)存由一個(gè)進(jìn)程創(chuàng)建,但多個(gè)進(jìn)程都可以訪問(wèn).共享內(nèi)存是最快的IPC(進(jìn)程間通信)方式,它是針對(duì)其它進(jìn)程間通信方式運(yùn)行效率低而專門設(shè)計(jì)的.它往往與其他通信機(jī)制,如信號(hào)量,配合使用,來(lái)實(shí)現(xiàn)進(jìn)程間的同步與通信.

優(yōu)點(diǎn):無(wú)須復(fù)制,快捷,信息量大;

缺點(diǎn):1)通信是通過(guò)將共無(wú)法實(shí)現(xiàn)享空間緩沖區(qū)直接附加到進(jìn)程的虛擬地址空間中來(lái)實(shí)現(xiàn)的,因此進(jìn)程間的讀寫(xiě)操作的同步問(wèn)題;2)利用內(nèi)存緩沖區(qū)直接交換信息,內(nèi)存的實(shí)體存在于計(jì)算機(jī)中,只能同一個(gè)計(jì)算機(jī)系統(tǒng)中的諸多進(jìn)程共享,不方便網(wǎng)絡(luò)通信


6)套接字:可用于不同及其間的進(jìn)程通信

優(yōu)點(diǎn):1)傳輸數(shù)據(jù)為字節(jié)級(jí),傳輸數(shù)據(jù)可自定義,數(shù)據(jù)量小效率高;2)傳輸數(shù)據(jù)時(shí)間短,性能高;3) 適合于客戶端和服務(wù)器端之間信息實(shí)時(shí)交互;4) 可以加密,數(shù)據(jù)安全性強(qiáng)

缺點(diǎn):1) 需對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行解析,轉(zhuǎn)化成應(yīng)用級(jí)的數(shù)據(jù)。


4.線程之間的通信方式?

# 鎖機(jī)制:包括互斥鎖、條件變量、讀寫(xiě)鎖

*互斥鎖提供了以排他方式防止數(shù)據(jù)結(jié)構(gòu)被并發(fā)修改的方法。

*讀寫(xiě)鎖允許多個(gè)線程同時(shí)讀共享數(shù)據(jù),而對(duì)寫(xiě)操作是互斥的。

*條件變量可以以原子的方式阻塞進(jìn)程,直到某個(gè)特定條件為真為止。對(duì)條件的測(cè)試是在互斥鎖的保護(hù)下進(jìn)行的。條件變量始終與互斥鎖一起使用。

# 信號(hào)量機(jī)制(Semaphore):包括無(wú)名線程信號(hào)量和命名線程信號(hào)量

#信號(hào)機(jī)制(Signal):類似進(jìn)程間的信號(hào)處理

線程間的通信目的主要是用于線程同步,所以線程沒(méi)有像進(jìn)程通信中的用于數(shù)據(jù)交換的通信機(jī)制。

5.什么時(shí)候用多線程?什么時(shí)候用多進(jìn)程?

1)需要頻繁創(chuàng)建銷毀的優(yōu)先用線程

原因請(qǐng)看上面的對(duì)比。

這種原則最常見(jiàn)的應(yīng)用就是Web服務(wù)器了,來(lái)一個(gè)連接建立一個(gè)線程,斷了就銷毀線程,要是用進(jìn)程,創(chuàng)建和銷毀的代價(jià)是很難承受的

2)需要進(jìn)行大量計(jì)算的優(yōu)先使用線程

所謂大量計(jì)算,當(dāng)然就是要耗費(fèi)很多CPU,切換頻繁了,這種情況下線程是最合適的。

這種原則最常見(jiàn)的是圖像處理、算法處理。

3)強(qiáng)相關(guān)的處理用線程,弱相關(guān)的處理用進(jìn)程

什么叫強(qiáng)相關(guān)、弱相關(guān)?理論上很難定義,給個(gè)簡(jiǎn)單的例子就明白了。

一般的Server需要完成如下任務(wù):消息收發(fā)、消息處理。“消息收發(fā)”和“消息處理”就是弱相關(guān)的任務(wù),而“消息處理”里面可能又分為“消息解碼”、“業(yè)務(wù)處理”,這兩個(gè)任務(wù)相對(duì)來(lái)說(shuō)相關(guān)性就要強(qiáng)多了。因此“消息收發(fā)”和“消息處理”可以分進(jìn)程設(shè)計(jì),“消息解碼”、“業(yè)務(wù)處理”可以分線程設(shè)計(jì)。

當(dāng)然這種劃分方式不是一成不變的,也可以根據(jù)實(shí)際情況進(jìn)行調(diào)整。

4)可能要擴(kuò)展到多機(jī)分布的用進(jìn)程,多核分布的用線程

原因請(qǐng)看上面對(duì)比。

5)都滿足需求的情況下,用你最熟悉、最拿手的方式

至于“數(shù)據(jù)共享、同步”、“編程、調(diào)試”、“可靠性”這幾個(gè)維度的所謂的“復(fù)雜、簡(jiǎn)單”應(yīng)該怎么取舍,我只能說(shuō):沒(méi)有明確的選擇方法。但我可以告訴你一個(gè)選擇原則:如果多進(jìn)程和多線程都能夠滿足要求,那么選擇你最熟悉、最拿手的那個(gè)。


題外話~

堅(jiān)持學(xué)習(xí),還要會(huì)高效的學(xué)習(xí),單位時(shí)間內(nèi)你學(xué)到的東西越多越好。

現(xiàn)在那么多優(yōu)質(zhì)的視頻課程,學(xué)起來(lái)比看書(shū)快多了,找一些大牛出的課程,適當(dāng)花點(diǎn)錢。再說(shuō)了,花了錢會(huì)給自己點(diǎn)壓力,不學(xué)的話錢就浪費(fèi)了,讓你更容易堅(jiān)持下去。

不要在學(xué)習(xí)方面舍不得花錢,投資自己比投資其他東西更靠譜,再說(shuō)普通人能接觸到的好的投資機(jī)會(huì)也不多,房子太貴,股市、P2P、加密數(shù)字貨幣,不送人頭當(dāng)韭菜就不錯(cuò)了。

以上不是說(shuō)只有花錢才是高效學(xué)習(xí)的唯一途徑,你能找到其他高效的途徑,沒(méi)問(wèn)題。

感興趣的朋友可以點(diǎn)擊下面的鏈接獲取高效學(xué)習(xí)的途徑!
推薦內(nèi)容