面試題目:進程與線程

目錄

題目一:進程與線程的區別?

題目二:進程之間的通信方式?

題目三:多線程用到的鎖?


題目一:進程與線程的區別?

1,進程是資源分配的最小單位;線程是程序執行的最小單位,也是處理器調度的基本單位。

2,進程有獨立的地址空間,啓動一個進程系統就會爲它分配地址空間,建立數據表來維護代碼段,堆棧段和數據段;線程共享進程中的數據,使用相同的地址空間。

3,進程通信需要以IPC的方式(Inter-Process Communication,進程間通信);線程共享全局變量,靜態變量等數據,通信更爲方便。

4,進程切換消耗的資源大,效率低,但多進程程序更健壯,一個進程死掉並不會對另外一個進程造成影響;多線程程序只要有一個線程死掉,整個進程也跟着死掉了。

題目二:進程之間的通信方式?

1,無名管道( pipe ):管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關係的進程間使用。

2,有名管道(named pipe):有名管道也是半雙工的通信方式,但是它允許無親緣關係進程間通信。

3,高級管道(popen):將另一個程序當做一個新的進程在當前程序中啓動,則它算是當前程序的子進程。

4,信號( sinal ):信號通常是系統定義(SIGKILL等),用於通知接收進程某個事件已經發生。

5,信號量( semophore ):信號量是一個計數器,可以用來控制多個進程對共享資源的訪問,它常作爲一種鎖機制,防止某進程正在訪問共享資源時,其他進程也訪問該資源。因此主要作爲進程間以及同一進程內不同線程之間的同步手段。

6,消息隊列( message queue ) :消息隊列是由消息的鏈表,存放在內核中並由消息隊列標識符標識,消息隊列克服了信號傳遞信息少,管道只能承載無格式字節流以及緩衝區大小受限等缺點。

7,共享內存( shared memory ):共享內存就是映射一段能被其他進程所訪問的內存,這段共享內存有一個進程創建,但多個進程都可以訪問。共享內存是最快的IPC方式。

8,套接字( socket ) :套解口也是一種進程間通信機制,與其他通信機制不同的是,它可用於不同機器間的進程通信。

題目三:多線程用到的鎖?

1,互斥鎖:爲了避免多個線程在某一時刻同時操作一個共享資源。例如線程池中的有多個空閒線程和一個任務隊列。任何是一個線程都要使用互斥鎖互斥訪問任務隊列,以避免多個線程同時訪問任務隊列以發生錯亂。

2,條件鎖:某一個線程因爲條件爲滿足使可以使用條件變量是程序處於阻塞狀態。常見就是在線程池中,起初沒有任務時任務隊列爲空,此時線程池中的線程因爲“任務隊列爲空”這個條件處於阻塞狀態。一旦有任務進來,就會以信號量的方式喚醒一個線程來處理這個任務。

3,自旋鎖:從“自旋鎖”的名字也可以看出來,如果一個線程想要獲取一個被使用的自旋鎖,那麼它會一致佔用CPU請求這個自旋鎖使得CPU不能去做其他的事情,直到獲取這個鎖爲止,這就是“自旋”的含義。當發生阻塞時,互斥鎖可以讓CPU去處理其他的任務;而自旋鎖讓CPU一直不斷循環請求獲取這個鎖。

4,讀寫鎖:讀寫鎖也叫共享-獨佔鎖。當讀寫鎖以讀模式鎖住時,它是以共享模式鎖住的;當它以寫模式鎖住時,它是以獨佔模式鎖住的。寫獨佔、讀共享。讀寫鎖非常適合於對數據結構讀的次數遠大於寫的情況。

歡迎訂閱公衆號【從零開始學無線】,一起學習交流!

                                                                     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章