進程和線程

算是對原文的總結加上兩個實際的例子,最好能看一看英文原文,人家說得更詳細。

進程(process)

一個進程就是程序的一個實例。程序運行時需要計算機硬件資源的支持,操作系統的任務就是分配進程需要的資源。
每個進程都需要的計算機資源包括內存,寄存器,程序計數器,棧,堆。
和線程不同,每個進程的堆都是互相獨立的。這也保證了某個進程出錯不會影響到其他進程。

線程(thread)

線程就是對進程獲得的(操作系統分配的)資源的再分配,這種分配由程序完成(隨着一個進程中線程數的增加,進程佔用的資源也會更多以滿足新線程需要佔用的資源,這是一種動態的過程)。在進程內部,每個線程有自己獨有的棧,但是進程內部的堆是由線程共享的,這樣做的好處是方便了線程間的通信,但是會引起線程安全問題。

併發(concurrent)和並行(parallel)

程序運行過程中需要用到很多資源,包括CPU,但是CPU對自己要處理部分的處理速度遠遠快於其他資源對它們要處理部分的處理速度,所以在大部分的時間,CPU會處於閒置狀態,爲了提高CPU的利用率,可以讓CPU輪流處理不同的線程,因爲CPU處理每個線程所花的時間都極短,所以看起來好像那些線程是同時被處理的。這叫併發。
並行是指CPU有多個核心,可以真正地同時處理多個線程。

EXCEL和記事本(notepad)

我們可以看一看excel和記事本分別是如何處理打開多個文件這種情況的,然後分析一下它們使用的技術。
我們打開“新建記事本1.txt”和“新建記事本2.txt”,“新建 Microsoft Excel 工作表1.xlsx”和“新建 Microsoft Excel 工作表2.xlsx”。然後打開任務管理器可以看到:
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述
可以看到,excel只有一個進程,兩個文件分別對應一個線程,記事本有兩個進程,每個進程中只有一個線程。

excel這種打開新文件時不創建新進程而是創建新線程的好處就在於線程之間的堆是共享的,線程間的通信很方便。比如“新建 Microsoft Excel 工作表1.xlsx”的A1單元格的值是1,我們在“新建 Microsoft Excel 工作表2.xlsx”的A1單元格里面寫入公式“=’[新建 Microsoft Excel 工作表1.xlsx]Sheet1’!$A$1”,就可以獲取“新建 Microsoft Excel 工作表1.xlsx”的A1單元格的值。

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