window和linux下線程區別

大多編程語言都支持線程機制,該機制允許在同一進程的共享內存地址空間運行一組特殊的進程,即線程。這些線程共享同一段地址空間,已經打開的文件,進程打開的文件描述符、信號的處理器、進程的當前目錄和進程用戶ID與進程組ID等。
線程不是越多越好,當線程數多餘系統核數。系統要實現多線程需要在線程之間來回切換,線程切換之間的中間變量需要消耗一定的資源。

1.linux

linux內核沒有專門創建線程的機制,其實linux中沒有線程的概念,它把線程當作進程的一個子集來管理。linux沒有爲線程提供額外的調度算法、描述和存儲線程的數據結構。用task_struct結構體記錄和描述線程與進程。因此線程就是一個能和其他進程共享資源的進程。linux進程本身就是輕量級的。
從C語言代碼層次來看,linux系統爲n個線程創建4個task_struct結構體,然後在裏面定義共享資源。
通過調用內核中fork()函數和exec()函數來創建線程並且調用clone()函數傳遞一個參數用於描述共享資源。

2.window

window系統提供了專門用於創建線程的機制,線程被稱爲“輕量級進程”,因爲線程耗費的資源少,能夠較快的創建和運行。
從C語言代碼層次來看,window操作系統會有一個進程描述符其包含指向n個不同線程的指針,負責描述地址空間,打開文件等共享資源,而線程本身再去描述自己獨佔的資源

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