从维基百科它说:
内核线程是内核调度的“最轻”单元。每个进程中至少存在一个内核线程。
我了解到进程是一个容器,其中包含内存空间、文件句柄、设备句柄、系统资源等……而线程是真正由内核调度的线程。
那么在单线程应用程序中,一个线程(我相信主线程)是内核线程吗?
从维基百科它说:
内核线程是内核调度的“最轻”单元。每个进程中至少存在一个内核线程。
我了解到进程是一个容器,其中包含内存空间、文件句柄、设备句柄、系统资源等……而线程是真正由内核调度的线程。
那么在单线程应用程序中,一个线程(我相信主线程)是内核线程吗?
不。在现代操作系统中,应用程序和内核运行在不同的处理器保护级别(通常称为环)。例如,英特尔 CPU 有四个保护级别。内核代码在 Ring 0(内核模式)运行,能够执行最高特权的处理器指令,而应用程序代码在 Ring 3(用户模式)运行,不允许执行某些操作。见http://en.wikipedia.org/wiki/Ring_(computer_security)
我假设您正在谈论这篇文章: http ://en.wikipedia.org/wiki/Kernel_thread
根据那篇文章,在单线程应用程序中,由于根据定义只有一个线程,因此它必须是内核线程,否则它不会被调度并且不会运行。
如果您的应用程序中有多个线程,那么它将取决于用户模式多线程的实现方式(内核线程、光纤等)。
重要的是要注意,当执行应用程序代码时(除非您进行系统调用),它将是在用户模式下运行的内核线程。在用户模式下运行时执行受保护指令的任何尝试都会导致错误,最终导致进程终止。
所以这里的内核线程不要与主管/特权模式和内核代码混淆。
您可以执行内核代码,但您必须先通过系统调用门。