内核线程数=核心数?

内核线程数=核心数?

我想知道系统的最大内核线程数是否由 CPU 的内核数决定。还是以其他方式决定?

答案1

不,您可以将最大内核线程设置为非常高的数字。

请注意,“线程”一词可用于许多不同的用途:

这可能是因为英特尔的使用造成了混乱。


更新内核线程

以下是在 AMD Athlon 64 X2 双核处理器上的 Vista 环境下在 CoLinux 中运行的一些 Linux 内核线程。

$ ps -eLf
UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
root         1     0     1  0    1 17:24 ?        00:00:00 init [2]
root         2     0     2  0    1 17:24 ?        00:00:00 [kthreadd]
root         3     2     3  0    1 17:24 ?        00:00:00 [ksoftirqd/0]
root         4     2     4  0    1 17:24 ?        00:00:00 [events/0]
root         5     2     5  0    1 17:24 ?        00:00:00 [khelper]
root        21     2    21  0    1 17:24 ?        00:00:00 [kblockd/0]
root        22     2    22  0    1 17:24 ?        00:00:00 [kseriod]
root        41     2    41  0    1 17:24 ?        00:00:00 [pdflush]
root        42     2    42  0    1 17:24 ?        00:00:00 [pdflush]
root        43     2    43  0    1 17:24 ?        00:00:00 [kswapd0]
root        44     2    44  0    1 17:24 ?        00:00:00 [aio/0]
root       727     2   727  0    1 17:24 ?        00:00:00 [kjournald]

轻量级工作计划是线程 ID。

(见man ps:“-L 显示线程,可能包含 LWP 和 NLWP 列”……“LWP lwp(轻量级进程,或线)所报告的 lwp 的 ID。(别名 spid,时间)”)

kthreadd 是内核线程守护进程,我相信它负责所有其他内核线程。请注意,我没有显示像 klogd 这样的不在 ring 0 中执行的守护进程(据我所知)。

内核线程数 != CPU 核心数。(参考问题标题)


内核线程由一组寄存器、一个堆栈和一些相应的内核数据结构组成。

内核线程相对于进程的优势在于,与进程相比,内核线程具有更快的创建速度和上下文切换速度。

内核线程被认为是“轻量级的”,线程数量仅受地址空间和处理器时间的限制

具体来说,操作系统内核倾向于将内核线程视为一种特殊的进程,而不是一个独特的实体。例如,在 Solaris 中,内核线程被称为“轻量级进程”(轻量级工作计划Linux 实际上使用一种称为“克隆”的特殊 fork 变体来创建内核线程,直到最近才为每个线程分配一个单独的进程 ID。由于这种传统,在实践中,内核线程在内存和时间成本上往往比用户级线程更接近进程,

可迁移并行程序中的多控制流2006 年)

相关内容