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

當前位置: 首頁 > 軍事新聞 >

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

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


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


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

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

線程概念

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

舉個例子來說多線程就像是火車上的每節(jié)車廂,而進程就是火車。

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

我們從各個方面來看待這個問題,由下面的圖片說明:


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

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

1)管道

管道分為有名管道和無名管道

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

有名管道也是一種半雙工的通信方式,但是它允許無親緣關系進程間的通信。

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

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

2)信號量

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

優(yōu)點:可以同步進程;缺點:信號量有限

3)信號

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

4)消息隊列

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

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


5)共享內(nèi)存

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

優(yōu)點:無須復制,快捷,信息量大;

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


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

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

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


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

# 鎖機制:包括互斥鎖、條件變量、讀寫鎖

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

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

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

# 信號量機制(Semaphore):包括無名線程信號量和命名線程信號量

#信號機制(Signal):類似進程間的信號處理

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

5.什么時候用多線程?什么時候用多進程?

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

原因請看上面的對比。

這種原則最常見的應用就是Web服務器了,來一個連接建立一個線程,斷了就銷毀線程,要是用進程,創(chuàng)建和銷毀的代價是很難承受的

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

所謂大量計算,當然就是要耗費很多CPU,切換頻繁了,這種情況下線程是最合適的。

這種原則最常見的是圖像處理、算法處理。

3)強相關的處理用線程,弱相關的處理用進程

什么叫強相關、弱相關?理論上很難定義,給個簡單的例子就明白了。

一般的Server需要完成如下任務:消息收發(fā)、消息處理?!跋⑹瞻l(fā)”和“消息處理”就是弱相關的任務,而“消息處理”里面可能又分為“消息解碼”、“業(yè)務處理”,這兩個任務相對來說相關性就要強多了。因此“消息收發(fā)”和“消息處理”可以分進程設計,“消息解碼”、“業(yè)務處理”可以分線程設計。

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

4)可能要擴展到多機分布的用進程,多核分布的用線程

原因請看上面對比。

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

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


題外話~

堅持學習,還要會高效的學習,單位時間內(nèi)你學到的東西越多越好。

現(xiàn)在那么多優(yōu)質(zhì)的視頻課程,學起來比看書快多了,找一些大牛出的課程,適當花點錢。再說了,花了錢會給自己點壓力,不學的話錢就浪費了,讓你更容易堅持下去。

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

以上不是說只有花錢才是高效學習的唯一途徑,你能找到其他高效的途徑,沒問題。

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