不,您可以将最大内核线程数设置为非常高的数字。
请注意,“线程”一词用于许多不同的事物:
大多数程序员使用它来指代 POSIX 线程意义上的独立执行线程。这是一种组织程序的方式,不依赖于硬件支持。请参阅Linux 中每个进程的最大线程数?
英特尔用它来指代他们的“超线程”技术。请参阅为什么我的英特尔 i7-920 显示 8 核而不是 4 核?与CPU 相关的“线程”是什么意思?
可能是英特尔的使用引起了混乱。
更新内核线程
下面是一些在 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]
Run Code Online (Sandbox Code Playgroud)
LWP是线程 ID。
(请参阅man ps:“-L 显示线程,可能带有 LWP 和 NLWP 列”……“LWP lwp(轻量级进程或线程)报告的 lwp 的 ID。(别名 spid、tid)”)
kthreadd 是内核线程守护进程,我相信它负责所有其他内核线程。注意我没有展示像 klogd 这样不在 ring 0 中执行的守护进程(据我所知)。
内核线程数!= CPU 内核数。(参考问题标题)
内核线程由一组寄存器、一个堆栈和一些相应的内核数据结构组成。
…
与进程相比,内核线程相对于进程的所谓优势是更快的创建和上下文切换。
…
内核线程被认为是“轻量级的”,人们会期望线程数仅受地址空间和处理器时间的限制
…
特别是,操作系统内核倾向于将内核线程视为一种特殊的进程,而不是一个独特的实体。例如,在 Solaris 内核中线程被称为“轻量级进程”(LWP)。Linux 实际上使用称为“clone”的特殊 fork 变体创建内核线程,并且直到最近才给每个线程一个单独的进程 ID。由于这种传统,实际上内核线程在内存和时间成本上往往比用户级线程更接近进程,
(可迁移并行程序中的多控制流2006)
| 归档时间: |
|
| 查看次数: |
6750 次 |
| 最近记录: |