AMA*_*MAR 6 java multithreading operating-system cpu-architecture green-threads
我正在阅读线程和进程之间的差异,并且几乎在网上到处都是,一个差异通常没有太多解释:
如果一个进程被阻塞,剩余的进程可以继续执行。如果一个用户级线程被阻塞,它的所有对等线程也会被阻塞。
这对我没有任何意义。如果调度程序不能在阻塞线程和就绪/可运行线程之间切换,那么并发的意义是什么。给出的原因是,由于操作系统不区分给定父进程的各个线程,因此它会立即阻止所有线程。
我觉得这很不令人信服,因为所有现代操作系统都有带有线程 ID 的线程控制块,即使它仅在父进程的内存空间内有效。就像 Galvin 的《操作系统》一书中给出的示例一样,如果拼写检查线程无法连接到某个在线词典,我不希望正在处理我的打字的线程被阻塞。
要么我对这个概念的理解有误,要么所有这些网站多年来都只是复制了一些旧的线程差异。此外,我在书中找不到这种说法,例如 Galvin 的书或 William Stalling 的 COA 书,其中讨论了线程。
提前致谢。
编辑: 这些是我找到语句的资源:
内核级线程和用户级线程之间存在差异。简单来说:
由于用户级线程需要映射到内核级线程,因此需要选择合适的映射。您可以将每个用户级别映射到单独的内核级别线程。您还可以将多个用户级映射到一个内核级线程。在后一个映射中,“正如我们所知”,您让多个并发执行路径由单个线程执行。如果这些路径之一阻塞,请记住用户级线程需要让出执行,然后执行(内核级)线程阻塞,这会导致所有其他分配的路径也被有效阻塞。我想,这就是声明所指的内容。仅供参考:在 Java 中,用户级线程(您在程序中执行的多线程)由 JVM(即运行时系统)映射到内核级线程。
相关资料:
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |