进程、线程、并行与并发( 二 )


进程、线程、并行与并发

文章插图
 
上下文切换与资源开销多线程除了增加编码难度外,它还在执行过程中带来实际的损耗,包括资源开销和上下文切换开销 。资源开销主要包括其本身占用的内存资源、执行时线程本地栈开销以及对这些线程进行管理的开销 。而上下文切换开销则是因为CPU由一个线程切换到另外一个线程是需要做现场保护和现场恢复工作,包括线程标识、寄存器内存、线程状态、线程优先级、线程资源清单等等 。如下图所示,假设线程一和线程二由某个CPU执行 。线程一执行一段时间后将相关信息保存到现场数据结构中,而线程数据结构存放在主存储中,然后从线程二对应的现场数据结构中恢复线程二相关信息,完成现场恢复后线程二开始执行 。接下去的过程反过来,由线程二切换到线程一 。其中可以看到由虚线分割的两部分被标为切换开销,从完整的时序来看,这两部分并非执行线程的任务,而是消耗在了现场的保护和恢复上了,这便是上下文切换的开销 。
进程、线程、并行与并发

文章插图
上下文切换
在实践中我们要综合考虑多线程的优缺点,不能一味的去追求多线程,在使用多线程之前我们必须去衡量多线程带来的好处与代价 。
更多Java并发原理可关注作者下面的专栏:
作者简介:笔名seaboat,擅长人工智能、计算机科学、数学原理、基础算法 。出版书籍:图解数据结构与算法、Tomcat内核设计剖析、图解Java并发原理、人工智能原理科普 。

【进程、线程、并行与并发】


推荐阅读