我知道用户级线程是在用户模式(没有特权)上创建的,内核线程是在内核模式(特权)中创建的。我还意识到处理器线程是在内核线程上操作的硬件线程(我希望这样做是正确的)
以下是我的困惑:-
操作系统无法识别
。
如果没有创建内核线程,那么我们如何创建利用多线程处理的多线程程序?
发布于 2022-08-15 15:29:18
纯粹的用户级线程(正如您所指出的)没有太多的用途,因为它们不允许您利用进程中多个核的处理能力。
另一方面,纯内核级线程在线程之间切换时通常会产生大量的开销。(你可以做一些事情来解决这个问题,但是.(这是另一个话题。)但其结果是,管理费用使得使用内核级线程预置小任务(工作单位)效率低下。
这两种线程的另一种选择是用户级和内核级线程的混合。例如,假设:
Java项目正在沿着这些思路开发一个新的线程模型(大致)。经典的Java线程仍然是内核级线程。新的虚拟线程是用户级线程。Java程序可以选择使用经典线程还是虚拟线程.或者两者都是。
网上有很多关于织机的资料。
Loom很可能是下一个Java版本的一部分: Java 19。
我很确定(C / C++) POSIX线程是内核级别的。我不知道OpenMPI线程,但我认为它们也是内核级的。(它们不适合用作纯用户级线程。)
我听说过C/ C++的混合线程模型,尽管我不知道实际的实现。寻找文章,诸如此类的谈论线程与纤维。
发布于 2022-08-15 16:30:07
.在这种情况下多线程有什么用?
多线程比多进程更古老。多线程是并行计算的一种模型。也就是说,这是一种编写计算机程序的方法,允许不同的活动相互独立地进行。一个典型的例子是多用户网络服务器,它为每个连接的客户端创建一个新线程。每个线程都可以以简单、同步的方式与自己的客户机对话,尽管不同的客户端之间可能没有同步。为此您不需要有多个CPU。
当多CPU计算机被发明出来时,使用多线程来利用它们进行并行处理是一种自然而明显的选择。
--我的意思是,不能利用多个CPU的绿色线程程序的计算时间仍然相同。
的确如此,但根据程序并发执行的不同活动,多线程版本可能比构建在不同并发模型上的程序更容易阅读和理解。
原因是,当我们还是初学者的时候,我们都被教导要编写单线程同步代码。我们知道我们在写“电脑”的指令。我们现在说的是“线程”,而不是“计算机”,但否则,每个线程执行的代码基本上可以与我们作为初学者编写的代码样式相似。
使其如此简单的部分原因是,每个并发活动的状态大部分可以隐含在不同线程的上下文和局部变量(即堆栈)中。如果您选择了不同的并发模型(例如, model),那么您可能必须使用(可能是复杂的)数据结构显式地表示该状态的更多内容。
*容易阅读,但不一定容易写而不犯微妙的错误。但是,当我开始与大型软件开发团队合作时,他们告诉我,我每写一行代码,就会读大约十行代码,所以“容易读但写难”从长远来看是一场胜利。
https://stackoverflow.com/questions/73362476
复制相似问题