【面試練習題】線程相關:來自《後臺開發技術應用實踐》 + 其他

【1】線程的狀態:默認爲非綁定、非分離、1MB大小的堆棧,與父進程具有同樣的優先級

 

【2】等待線程——pthread_join

  • 功能:阻塞等待,知道子線程結束運行,然後得到子線程退出碼,回收子線程的資源。

  • 如果不使用pthread_join回收線程,可能會導致類似殭屍進程一樣的問題,導致內存泄漏。

 

【3】線程分離——pthread_detach

  • 默認情況下,線程是非分離態(結合態)

  • 如果不關心線程的退出時的狀態,可以將之設置爲分離態這種情況下,線程終止時能夠自動清除資源

  • 使用detach會讓線程在後臺運行

 

【4】多線程同步:

  • 互斥鎖

  • 讀寫鎖(

讀寫鎖非常適合對數據讀的次數比寫的次數多。

三種狀態:

1. 當資源加上了寫鎖之後,所有試圖對資源加鎖的線程都被阻塞;

2.  讀模式加鎖時,如果線程是讀加鎖則成功,如果線程是寫加鎖會阻塞。

3. 讀鎖、寫鎖並行阻塞時,寫鎖優先級高,即解鎖後優先執行寫鎖操作

  • 條件變量(互斥量是線程程序必需的工具,但並非是萬能的。例如,如果線程正在等待共享數據內某個條件出現,那會發生什麼呢?它可能重複對互斥對象鎖定和解鎖,每次都會檢查C++共享數據結構,以查找某個值。但這是在浪費時間和資源,而且這種繁忙查詢的效率非常低。)

  • 信號量

  • 屏障(

屏障允許任意線程等待,直到所有線程完成屏障前的處理工作,然後所有線程再開始屏障之後的工作;

比如pthread_join就是一種屏障,需要一個線程等待另一個線程終止

 

【5】線程並行方式

  • 任務並行(把一個任務拆分成多個子任務,分工協作)

  • 數據並行(比如大數處理的時候,可以使用數據並行,需要用到屏障進行同步)

 

【6】多線程模型

  • master - worker

  • fork - join(大數據處理比如)

  • 生產者 - 消費者(lis比如)

  • future模型和actor模型不瞭解

https://www.cnblogs.com/PerkinsZhu/p/7570775.html

另一種解釋:內核線程和用戶線程之間的關係:

  • 一對多(不支持多核CPU)

  • 一對多

  • 多對多

 

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