gpt4 book ai didi

multithreading - 用户级线程 (ULT) 和内核级线程 (KLT) 在并发执行方面有何不同?

转载 作者:行者123 更新时间:2023-12-04 06:41:24 24 4
gpt4 key购买 nike

这是我的理解;请更正/添加:

在纯 ULT 中,多线程进程本身进行线程调度。因此,内核基本上没有注意到差异,并将其视为单线程进程。如果一个线程进行阻塞系统调用,则整个进程都会被阻塞。 即使在多核处理器上,除非进程被阻塞,否则一次只能运行进程的一个线程。 我不确定 ULT 有多大帮助。

在纯 KLT 中,即使一个线程被阻塞,内核也会调度同一进程的另一个(就绪)线程。 (在纯 KLT 的情况下,我假设内核创建了进程的所有线程。)

此外,使用 ULT 和 KLT 的组合,ULT 如何映射到 KLT?

最佳答案

你的分析是正确的。操作系统内核不知道用户级线程。从它的角度来看,进程是一个不透明的黑匣子,偶尔会进行系统调用。因此,如果该程序有 100,000 个用户级线程但只有一个内核线程,那么该进程一次只能运行一个用户级线程,因为只有一个内核级线程与之关联。另一方面,如果一个进程有多个内核级线程,那么如果有一个多核机器,它就可以并行执行多个命令。

它们之间的一个常见折衷是让程序请求一些固定数量的内核级线程,然后让自己的线程调度程序根据需要将用户级线程分配到这些内核级线程上。这样,多个 ULT 可以并行执行,并且程序可以对线程的执行方式进行细粒度控制。

至于这种映射是如何工作的——有很多不同的方案。您可以想象用户程序使用多种不同的调度系统中的任何一种。事实上,如果你做这个替换:

Kernel thread <---> Processor core

User thread <---> Kernel thread



然后操作系统可以用来将内核线程映射到内核的任何方案也可以用于将用户级线程映射到内核级线程。

希望这可以帮助!

关于multithreading - 用户级线程 (ULT) 和内核级线程 (KLT) 在并发执行方面有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14791801/

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