什么是進程?什么是線程?
進程是系統中正在運行的一個程序,程序一旦運行就是進程。
進程可以看成程序執行的一個實例。進程是系統資源分配的獨立實體,每個進程都擁有獨立的地址空間。一個進程無法訪問另一個進程的變量和數據結構,如果想讓一個進程訪問另一個進程的資源,需要使用進程間通信,比如管道,文件,套接字等。
一個進程可以擁有多個線程,每個線程使用其所屬進程的棧空間。線程與進程的一個主要區別是,統一進程內的一個主要區別是,同一進程內的多個線程會共享部分狀態,多個線程可以讀寫同一塊內存(一個進程無法直接訪問另一進程的內存)。同時,每個線程還擁有自己的寄存器和棧,其他線程可以讀寫這些棧內存。
線程是進程的一個實體,是進程的一條執行路徑。
線程是進程的一個特定執行路徑。當一個線程修改了進程的資源,它的兄弟線程可以立即看到這種變化。
進程和線程的區別體現在以下幾個方面:
1.地址空間和其他資源(如打開文件):進程間相互獨立,同一進程的各線程間共享。某進程內的線程在其他進程內不可見。
2.通信:進程間通信IPC(管道,信號量,共享內存,消息隊列),線程間可以直接獨寫進程數據段(如全局變量)來進程通信——需要進程同步和互斥手段的輔助,以保證數據的一致性。
3.調度和切換:線程上下文切換比進程上下文切換快得多。
4.在多線程OS中,進程不是一個可執行的實體。
進程和線程的選擇取決以下幾點:
1.需要頻繁創建銷毀的優先使用線程;因為對進程來說創建和銷毀一個進程的代價是很大的。
2.線程的切換速度快,所以在需要大量計算,切換頻繁時使用線程,還有耗時的操作時用使用線程可提高應用程序的響應。
3.因為對CPU系統的效率使用上線程更占優勢,所以可能要發展到多機分布的用進程,多核分布用線程。
4.并行操作時用線程,如C/S架構的服務器端并發線程響應用戶的請求。
5.需要更穩定安全時,適合選擇進程;需要速度時,選擇線程更好。
免責聲明:本文不構成任何商業建議,投資有風險,選擇需謹慎!本站發布的圖文一切為分享交流,傳播正能量,此文不保證數據的準確性,內容僅供參考