1 linux進程與線程的聯繫和區別:
在linux中,線程按照進程的方式實現。其實現機制與solaris和windows差異很大。
在現代操作系統中,進程支持多線程,進程是資源管理以及分配的最小單元,線程是程序執行的最小單元。一個進程實體分爲:線程集和資源集(包括地址空間、打開的文件以及用戶信息等)兩部分。線程有其私有數據:PC,棧以及寄存器。
採用多進程的問題:
1) fork一個子進程的開銷較大;
2) 各個進程擁有獨立的地址空間,需要複雜的進程間通信(IPC)技術,如消息傳遞和共享內存。
而採用線程的優點:
1) 改進程序的實時響應能力、通信方便
2) 更有效的使用多處理器
3) 改進程序結構,多控制流
4) 減少系統資源的使用
缺點:線程間地址空間共享可能會造成競爭。
2 linux線程的分類
1) 內核線程:linux內核可以看作一個服務進程,內核有多個執行流並行,因此內核線程作爲內核的分身,完成可以並行的功能模塊。內核線程的調度有內核負責,一個內核線程處於阻塞狀態時不影響其他的內核線程。
2) 用戶線程:在用戶空間中實現,內核不能獨立地對用戶線程進行調度,而是由一個線程運行庫來組織線程的調度。
3 關於內核線程:
使用命令"ps -ef"查看系統當中的進程,其中帶有"[]"的都是內核線程。