关于 Java 多线程上下文切换的疑问

2018-04-12 10:59:51 +08:00
 tuzhenyu

求教大佬们一些疑问 (1) Java 中多线程上下文环境切换这里的上下文主要是指什么呢?是线程私有的栈和程序计数器吗?(2) 上下文切换会造成大量的内核空间和用户空间之间的数据拷贝,是指要将线程相关的信息装载到内核吗?谢谢~

2751 次点击
所在节点    程序员
6 条回复
wwqgtxx
2018-04-12 12:07:03 +08:00
你需要看看操作系统原理这本书
pwrliang
2018-04-12 13:46:28 +08:00
每个线程应该是有独立的 PC,但是寄存器应该是共享,所以上下文应该包括通用寄存器?还有,不知道 jvm 线程实现是用户级还是内核级别的?求大佬解答
qwertty01
2018-04-12 13:55:16 +08:00
@pwrliang 内核级的
wizardforcel
2018-04-12 16:23:35 +08:00
每个线程有自己的栈,但在同一个 va 里面,所以不用切换栈,切换 bp 和 sp 就行了,当然他们也是一种寄存器。
gabon
2018-04-12 17:58:09 +08:00
每个 Java 线程都映射为 Linux 内核线程,java 线程切换就是 Linux 线程切换,而 Linux 里线程和进程实现一致,都需要切换寄存器等等,相比之下线程不需要切换内存,换页等等,缓存也不会失效。有问题请指教。
crb912
2018-04-13 08:57:58 +08:00
这个和 java 没关系,操作系统原理。每个进程拥有自己的资源空间和执行的时间线,以及线程。假设线程 P1,还没执行结束,就要被迫暂停,那么操作系统会保留它的进度,包括变量,指令执行的位置,等等。然后切换新的线程,假设 P2。这个过程就是上下文切换。当 P2 运行结束之后,会再次切换回 P1。
这是计算机实现并发运行的手段。目的是看上去“同时”可以执行多个任务。
实际上频繁切换,反而导致效率的降低

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/446158

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX