首先,在提及什么是上下文之前,需要你对多线程有一些简单的了解。过几天我会将我在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