在 Linux 内核中,线程的概念和用户空间有所不同。以下是关键点分析:
- 由内核直接创建和管理,运行在内核空间
- 没有用户空间上下文(不映射用户空间内存)
- 通常以 kthreadd
为父进程,命名带方括号如 [kworker]
- 常见类型:
• kthreadd
(PID 2):内核线程守护进程
• ksoftirqd
:处理软中断
• kworker
:工作队列线程
• migration
:CPU迁移线程
• rcu
:RCU回调处理
- 最小化系统:约15-20个内核线程 - 典型桌面系统:30-50个 - 复杂服务器:可达100+个
- 工作队列线程(kworker)会按需创建/销毁 - 每个CPU核心会有对应的线程(如rcu, watchdog) - 设备驱动可能创建专用线程
ps -eLo pid,tid,psr,args | grep -E '\['
# 或
top -H -p 2 # 查看kthreadd的子线程
- 用户线程通过系统调用进入内核态时,会使用当前线程的内核栈 - 中断处理不算独立线程,但会抢占当前执行流
注意:精确数量取决于内核版本、配置参数(如CONFIG选项)、CPU核心数和活跃的外设驱动。服务器环境或特殊配置(如实时内核)会产生更多线程。
是否需要了解某种特定场景下的线程分析?