栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

多处理器机器中posix线程的并发性

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

多处理器机器中posix线程的并发性

由于您用“
Linux”标记标记了您的问题,因此我将根据linux下的标准pthreads实现来回答它。如果您谈论的是“绿色”线程,它们是在VM
/语言级别而不是在OS上调度的,那么您的答案通常是正确的。但是我下面的评论是关于Linux pthread的。

1)Posix线程是用户级线程,内核不知道。

不,这当然是不正确的。Linux内核和pthreads库一起工作以管理线程。内核执行上下文切换,调度,内存管理,缓存内存管理等。当然,还有其他管理是在用户级别完成的,但是如果没有内核,pthread的许多功能将丢失。

2)内核调度程序会将Process(及其所有线程)视为一个用于调度的实体。依次是线程库选择要运行的线程。它可以在可运行线程之间划分内核给定的cpu时间。

不,内核将每个进程线程视为一个实体。它有自己的时间划分规则,其中考虑了流程(和流程优先级),但是每个子流程线程都是可调度的实体。

3)用户线程可以在不同的cpu内核上运行。即让线程T1和T2由Process(T)创建,然后T1可以在Cpu1中运行,而T2可以在Cpu2中运行,但是它们不能同时运行。

否。多线程程序应同时执行。这就是为什么同步和互斥锁如此重要,以及为什么程序员忍受多线程编程的复杂性的原因。


向您证明这一点的一种方法是查看

ps
with
-L
选项的输出以显示关联的线程。
ps
通常将多个线程进程包装到一行中,但是
-L
您可以看到内核为每个线程有一个单独的虚拟进程ID:

ps -ef | grep 20587foo    20587     1  1 Apr09 ?        00:16:39 java -server -Xmx1536m ...

ps -eLf | grep 20587foo    20587     1 20587  0  641 Apr09 ?    00:00:00 java -server -Xmx1536m ...foo    20587     1 20588  0  641 Apr09 ?    00:00:30 java -server -Xmx1536m ...foo    20587     1 20589  0  641 Apr09 ?    00:00:03 java -server -Xmx1536m ......

我不确定Linux线程是否仍会这样做,但是从历史上看,pthreads使用

clone(2)
系统调用来创建其自身的另一个线程副本:

与fork(2)不同,这些调用允许子进程与调用进程共享其执行上下文的一部分,例如内存空间,文件描述符表和信号处理程序表。

这与

fork(2)
创建另一个完整过程时使用的方法不同。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/412546.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号