gpt4 book ai didi

java - 关于用户级线程阻塞时阻塞 "peer threads"的困惑

转载 作者:行者123 更新时间:2023-12-04 11:42:27 25 4
gpt4 key购买 nike

我正在阅读线程和进程之间的差异,并且几乎在网上到处都是,一个差异通常没有太多解释:

If a process gets blocked, remaining processes can continue execution.If a user level thread gets blocked, all of its peer threads also getblocked.


这对我来说没有任何意义。如果调度程序不能在阻塞线程和就绪/可运行线程之间切换,那么并发的意义是什么?给出的原因是,由于操作系统不区分给定父进程的各个线程,因此它会立即阻止所有线程。
我觉得这很不可信,因为所有现代操作系统都有带有线程 ID 的线程控制块,即使它仅在父进程的内存空间内有效。就像 Galvin 的《操作系统》一书中给出的例子一样,如果拼写检查线程无法连接到某个在线词典,我不希望正在处理我的打字的线程被阻塞。
要么我对这个概念的理解有误,要么所有这些网站多年来只是复制了一些旧的线程差异。此外,我在书中找不到这种说法,例如 Galvin 的书或 William Stalling 的 COA 书,其中讨论了线程。
这些是我找到这些陈述的资源:
  • https://www.geeksforgeeks.org/difference-between-process-and-thread/
  • https://www.tutorialspoint.com/difference-between-process-and-thread
  • https://www.guru99.com/difference-between-process-and-thread.html
  • https://www.javatpoint.com/process-vs-thread
  • 最佳答案

    内核级线程和用户级线程之间存在差异。简单来说:

  • 内核级线程:由操作系统管理的线程,包括调度。它们是在处理器上执行的内容。这可能是我们大多数人对线程的看法。
  • 用户级线程:由程序本身管理的线程。在某些情况下,它们也被称为纤程或协程。与内核级线程相反,它们需要“让执行”,即从一个用户级切换到另一个用户级线程是由程序明确完成的。用户级线程映射到内核级线程。

  • 由于用户级线程需要映射到内核级线程,因此需要选择合适的映射。您可以将每个用户级别映射到单独的内核级别线程。您还可以将多个用户级映射到一个内核级线程。在后一个映射中,“正如我们所知”,您让多个并发执行路径由单个线程执行。如果这些路径之一阻塞,请记住用户级线程需要让出执行,然后执行(内核级)线程阻塞,这会导致所有其他分配的路径也被有效阻塞。我想,这就是声明所指的内容。仅供引用:在 Java 中,用户级线程(您在程序中执行的多线程处理)由 JVM(即运行时系统)映射到内核级线程。

    相关资料:
  • Understanding java's native threads and the jvm
  • What is the difference between a thread and a fiber?
  • What is difference between User space and Kernel space?
  • What is the difference between concurrent programming and parallel programming?
  • Implementing threads
  • 关于java - 关于用户级线程阻塞时阻塞 "peer threads"的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68981493/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com