pthread在Linux运行,linux用户级别(pthread)线程是否在多个核心上运行?

我知道有:

1)用户级线程 – 在进程的相同地址空间内但具有不同的堆栈.

2)内核级线程 – 内核内存堆栈(我猜这里).

所以当我创建用户级线程时,内核不知道它们是[1].那么内核如何知道如何在不同的内核中调度不同的用户级线程.这个问题与pthread有关.如果pthread是用户级线程,它如何在多核上运行?

未来的答案读者:(感谢所有贡献者)

1)Ziffusion的答案(下)

解决方法:

So When I create user level threads, Kernels are not aware of them

这不完全正确.至少不是你想的那样.

用户空间线程库可以选择实现不一对一映射到内核线程的线程 – 但是 – 这些用户空间线程中的每一个都在内核线程上运行(当它运行时).这只意味着库可以在用户空间中自己进行调度,并决定将用户空间线程(它认为可以运行的线程)映射到池中的内核线程.从这个意义上讲,内核并不知道用户空间线程 – 但是 – 它非常了解用于运行这些用户空间线程的内核线程.

内核管理和调度内核线程.如果它决定,它可以在多个CPU上运行它们.这样做会导致映射到此类内核线程的用户空间线程也在这些CPU上运行.

实际上,这可以在许多系统中看到. Java或Python中的线程,Python中的greenlet,golang中的goroutine – 都使用这种机制.

Pthreads过去也是这样,但是它们的实现被改变为将每个pthread映射到专用的内核线程.但是pthreads实现很可能仍然使用用户空间线程模型.

还有另一种模型,其中用户空间线程可以完全是用户空间抽象,内核完全没有意识到.例如,可以使用setcontext()和getcontext()来实现单个进程内的用户空间线程.

标签:c-3,linux,multithreading,pthreads

来源: https://codeday.me/bug/20190702/1356064.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值