OS内部的线程创建可以同时运行吗?

时间:2012-04-16 14:32:21

标签: multithreading concurrency operating-system creation

假设我们的双核机器具有主流的现代操作系统,能够同时使用两个核心。 如果我在同一个进程中有两个线程, P1 Q1 ,它们就会开始创建子线程,例如 P2 Q2 ,在大致相同的机器周期,OS会同时执行线程创建吗?

我听说线程创建很昂贵,所以问题出现了......

提前致谢。

2 个答案:

答案 0 :(得分:2)

任何设计合理的操作系统都可以有多个处理器同时执行内核代码。因此,线程创建中涉及的一些任务可以同时发生。但是会有一些必要的序列化来操纵一些共享数据结构(例如,分配内存,将新创建的威胁结构插入到全局列表中)。处理器可以争用相同的锁,从而降低并发性。

系统/应用程序经常创建新线程,以致线程创建的开销实际上很重要,可能设计错误(在线程中相对于启动时间执行的有用工作太少,并且没有利用重用短路的明显优化来自池的生命线程。)

答案 1 :(得分:0)

它将同时进行。线程创建的某些方面无法并行进行 - 如果内核内存管理器将两个线程分配到同一个堆栈,那将是不幸的!

线程创建足够昂贵,而且在应用程序期间完全避免执行它是值得的。运行,因此线程池的流行。长时间运行的阻塞任务可以在应用程序的生命周期中被删除和保留 - 通常这意味着不需要显式的线程终止(最好的尴尬,最糟糕的是,用户代码几乎不可能)。

我认为开发人员不断启动和停止线程,因为他们喜欢将它们视为“函数”,在开始时传递参数',在线程结束时'返回'结果。这不是概念化线程的最佳方式。