LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1099|回复: 2

为什么内核线程的创建和管理要慢于用户线程的创建和管理?

[复制链接]
发表于 2005-11-28 00:29:54 | 显示全部楼层 |阅读模式
  1. “内核线程由操作系统直接支持:内核在其空间内执行线程的创建,调度和管理。因为线程管理由操作系统完成的,所以内核线程的创建和管理要慢于用户线程的创建和管理。”
复制代码
这是《操作系统概念》书上的原文。此外,我没搞清楚“内核线程”和“用户线程”之间的关系。它们之间的“多对一”,“一对一”和“多对多”是什么关系!
发表于 2005-11-28 18:08:55 | 显示全部楼层
多对一: 多个用户线程对应一个内核线程
一对一:一个用户线程对应一个内核线程
多对多:多个用户线程对应多个内核线程

用户线程在用户态调度,内核并不知情
内核线程在内核调度

详情请参看 Chapter 3 of Unix Internals
回复 支持 反对

使用道具 举报

发表于 2005-11-28 21:37:20 | 显示全部楼层
建议看英文
英文原版里是generally slower
少了一个词,意思就变了

事实上在使用nptl线程库的Linux里
这一点是不成立的
因为是1:1的关系
创建一个用户线程必定要创建一个相应的内核线程(task_struct)
在一个进程内创建第二个及以上线程的时候,应该会比创建单线程的进程速度快一些,因为会共享task_struct.mm等,但是不能bypass创建内核里的task的过程

而且创建内核里的task的时间也不是一个常量,clone的flags的不同导致共享的程度不一样
所以也不能笼统的说谁快谁慢

如果是内核里用来处理一些需要睡眠的任务的那种内核线程,比如events/n, ksoftirqd/n
创建速度反而应该会更快一点,因为mm为NULL
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表