首先,在提及什么是上下文之前,需要你對多線程有一些簡單的了解。過幾天我會將我在B站上關於多線程的學習記錄寫下來供大家一起學習和研究。
我們知道,線程是操作系統調度的基本單位。即使是單核CPU,也可以通過在很短的時間片內切換線程從而讓你感覺多線程在並行的假象,其實單核CPU是不可能存在線程並行的。單核CPU這種執行線程的行為叫做並發。
用知乎上的例子簡單解釋下並行和並發:知乎鏈接:https://www.zhihu.com/question/33515481
Erlang 之父 Joe Armstrong 用一張5歲小孩都能看懂的圖解釋了並發與並行的區別
並發是兩個隊列交替使用一台咖啡機,並行是兩個隊列同時使用兩台咖啡機,如果串行,一個隊列使用一台咖啡機,那么哪怕前面那個人便秘了去廁所呆半天,后面的人也只能死等着他回來才能去接咖啡,這效率無疑是最低的。
有評論里說,並發是不是一個線程,並行是多個線程?
答:並發和並行都可以是很多個線程,就看這些線程能不能同時被(多個)cpu執行,如果可以就說明是並行,而並發是多個線程被(一個)cpu 輪流切換着執行。
當程序A
(假設為單進程)放棄CPU
的時候,需要保存當前的上下文,何為上下文?也就是除了CPU
之外,寄存器或者其他的狀態,就跟犯罪現場一樣,需要拍個照,要不到時候別的程序執行完之后,怎么知道接下來怎么執行程序A
,之前執行到哪一步了。總結一句話:保存當前程序的執行狀態。
強烈推薦閱讀↓底下這篇文章,對線程和進程講解的很完善
上下文部分轉載於:https://www.cnblogs.com/Damaer/p/14791838.html