假设我们的双核机器具有主流的现代操作系统,能够同时使用两个核心。 如果我在同一个进程中有两个线程, P1 和 Q1 ,它们就会开始创建子线程,例如 P2 和 Q2 ,在大致相同的机器周期,OS会同时执行线程创建吗?
我听说线程创建很昂贵,所以问题出现了......
提前致谢。
答案 0 :(得分:2)
任何设计合理的操作系统都可以有多个处理器同时执行内核代码。因此,线程创建中涉及的一些任务可以同时发生。但是会有一些必要的序列化来操纵一些共享数据结构(例如,分配内存,将新创建的威胁结构插入到全局列表中)。处理器可以争用相同的锁,从而降低并发性。
系统/应用程序经常创建新线程,以致线程创建的开销实际上很重要,可能设计错误(在线程中相对于启动时间执行的有用工作太少,并且没有利用重用短路的明显优化来自池的生命线程。)
答案 1 :(得分:0)
它将同时进行。线程创建的某些方面无法并行进行 - 如果内核内存管理器将两个线程分配到同一个堆栈,那将是不幸的!
线程创建足够昂贵,而且在应用程序期间完全避免执行它是值得的。运行,因此线程池的流行。长时间运行的阻塞任务可以在应用程序的生命周期中被删除和保留 - 通常这意味着不需要显式的线程终止(最好的尴尬,最糟糕的是,用户代码几乎不可能)。
我认为开发人员不断启动和停止线程,因为他们喜欢将它们视为“函数”,在开始时传递参数',在线程结束时'返回'结果。这不是概念化线程的最佳方式。