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