【问题标题】:user level threads kernel level threads and fibers用户级线程内核级线程和纤程
【发布时间】:2012-11-01 12:06:38
【问题描述】:

我知道纤维在线程的上下文中运行。它们只是用户级别的。

我知道线程可以是用户级或内核级。

当您在用户级应用程序中创建线程时,它也是用户级的吗?

您可以在您的用户应用程序中创建内核级线程吗?

这些用户级线程也是由内核调度的?

当您在 .NET 中调用 CreateThread 时,内核如何发挥作用? CreateThread 函数是否需要通过 susbsystem dll 到执行并一直到内核才能创建用户级线程?

【问题讨论】:

    标签: windows multithreading kernel


    【解决方案1】:

    在 Windows 平台上,用户模式进程(应用程序)中的线程是用户模式线程,内核模式进程中的线程是内核模式线程。您不能在用户模式进程中创建内核模式线程。在 Windows 上,所有线程都由内核直接或间接调度(通过它如何配置 CPU 中断)。

    .Net CreateThread 最终使用从 Kernel32.dll 导出的 CreateThread API。

    【讨论】:

    • “在 Windows 平台上,用户模式进程(应用程序)中的线程是用户模式线程”-> 否。用户/内核级别的线程并不意味着要求在哪个级别创建它们。我的意思是他们在哪个级别受到管理。如果您通过 comming 语言(C# 线程、C++ 线程、Python 线程等)在 windows 中构建线程,它是内核级线程,因为内核负责其调度。用户级线程通常在用户级进行管理和调度,内核不知道它们的存在。
    • @Gupta 如何在没有内核管理/调度的情况下在 Windows 平台上创建线程?
    • 您应该使用允许您创建用户级线程的库。我不知道 Windows 上有任何内容。但是,这些库在没有通知内核的情况下创建用户级线程。当用户级线程想要进行上下文切换时,是库而不是内核负责进行切换。
    猜你喜欢
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2015-04-08
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多