【问题标题】:Can thread creation within OS internals run concurrently?操作系统内部的线程创建可以同时运行吗?
【发布时间】:2012-04-27 21:35:59
【问题描述】:

假设我们有一台双核机器,其主流的现代操作系统能够同时利用这两个内核。 如果我有两个线程,P1Q1 在同一个进程中,并且它们碰巧开始创建子线程,例如 P2Q2,在大致相同的机器周期,操作系统会同时执行线程创建吗?

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

提前致谢。

【问题讨论】:

  • 这两个线程是在同一个进程中产生还是在不同的进程中产生?这很重要。线程有一个必须从其启动的父进程。考虑到这一点,您是否将父进程视为第一个线程?进程和线程不一样。

标签: multithreading concurrency operating-system creation


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    线程创建非常昂贵,因此在应用期间完全避免创建线程是值得的。运行,因此线程池的流行。长时间运行的阻塞任务可以在应用程序的生命周期内被线程化并保留 - 这通常意味着不需要显式线程终止(从用户代码来看,最好的情况是尴尬,最坏的情况是几乎不可能)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2016-05-18
      • 2010-10-23
      • 2018-03-03
      • 1970-01-01
      相关资源
      最近更新 更多