0

我已经解决了这里关于PthreadsLinux 主题的所有问题,但有一个基本的疑问对我来说仍未解决:

在各种回复中都提到,当我们在 Linux 上创建 POSIX 线程时,用户线程和内核线程之间存在 1:1 的映射关系。

我的疑问是当我们pthread_create()在Linux中使用时,是否有1个用户线程和一个相应的唯一内核线程隐式创建(即总共2个线程,其中一个对用户不可见)

或者

只创建了一个内核线程,并且在较新的 Linux 内核中不再有任何称为用户线程的内容?

4

2 回答 2

2

NPTL(本机 POSIX 线程库)和较旧的 LinuxThreads 都使用 1:1 模型,其中用户创建的每个线程(或进程)对应于内核中的一个可调度实体。

但是,您可能对用户级线程或光纤感到困惑,它们是通过调用创建的执行线程makecontext()swapcontext()具有 N:1 模型,内核不知道用户级线程,它们的调度是在用户中完成的空间。

于 2012-11-17T17:41:15.483 回答
0

pthread_create() internally calls fork(), and vfork()/fork() internally calls clone(). So in most of the case it is 1:1 mapping.

于 2013-02-10T15:33:58.690 回答