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