進程和線程的區別

這個問題是基礎面試必問,作爲非計算機專業的人,我今天在閱讀《CLR via C#》的第25.1節才瞭解到區別

簡單來講:

進程是應用程序的一個實例要使用的資源的集合。

線程是一個虛擬化的CPU,或者邏輯CPU。

從概念上來講,進程與線程差別巨大,甚至可以說毫無關係;但是因爲現在操作系統都是設計成一個進程默認有一個執行線程,且線程只能使用當前進程內的資源,所以容易把線程理解成輕量級的進程

可以想象一下,如果操作系統有多個進程,但是隻有一個CPU,或者說只有一個線程,那必然是這一個CPU去依次順序切換不同的進程空間並去執行進程中的代碼,一旦代碼中有BUG,就會帶來整個系統的崩潰。以上所說的情景當然是不可能發生的,不過這樣的想象有助於幫助理解概念。

區別了兩個概念,也就知道了進程和線程的使命完全不同。

 

進程是爲了隔離:

1.隔離不同的應用程序實例。使得一個應用程序崩潰不會影響其它的應用程序

2.隔離應用程序和內核代碼/資源。使得應用程序不會影響內核的穩定性

線程是爲了執行和併發:

1.線程有自己的執行環境,因此爲創建這種環境,線程有自己的開銷

2.線程需要調度,因此有優先級,前臺後臺等概念

3.憋不出第三條了……

 

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