【问题标题】:what are the difficulties of operating system multithreading?操作系统多线程的难点是什么?
【发布时间】:2010-03-13 07:28:34
【问题描述】:

我正在阅读一本比较两种实现线程的方法的书,中间件线程和操作系统线程。我不知道这些句子的确切含义是什么: “然而,操作系统多线程的一个困难是性能开销。由于是操作系统参与切换线程,这涉及系统调用。这些通常比在用户级别执行的线程操作更昂贵,这是事务中间件正在运行。” 以及系统调用和性能的关系是什么?

【问题讨论】:

标签: multithreading operating-system


【解决方案1】:

这本书可能有点过时了,中间件线程(又名纤维)大约在 10 年前很流行。是的,上下文切换相对昂贵,大约在 2000 到 10,000 个 CPU 指令之间。它们需要内核转换并获取全局锁。用户线程可以避免大部分成本,只需要切换 CPU 状态。

但这不是免费的:

  • 您需要创建自己的调度程序
  • 当用户线程阻塞 I/O 操作时,所有用户线程都会阻塞
  • 用户上下文切换会破坏 CPU 缓存。

后一个问题是大问题,炸掉缓存真的很贵。与内存相比,CPU 内核变得如此之快,以至于破坏缓存的成本与操作系统上下文切换相当。而且获得大量 CPU 内核很便宜。

【讨论】:

    【解决方案2】:

    适用于大多数现代操作系统。 (Windows、*nix、MAC OS),操作系统内核驻留在受保护的地址空间中。并且为了保持该受保护空间的完整性,该空间只能从已知位置的用户空间进入。所以调用操作系统比在用户空间调用普通函数要贵一些。 http://en.wikipedia.org/wiki/System_call

    286 CPU 从用户空间到内核空间的速度相当慢,但最近的 CPU 架构,如当前的 x86 和 IA64,有专门设计的特殊指令,可以尽可能快地从用户空间到内核空间,并且虽然它仍然比用户空间中的普通函数调用更昂贵,但我认为这不足以证明本书所表明的关注程度。

    【讨论】:

      【解决方案3】:

      正如您引用的文本所说,系统调用通常比用户级线程操作更昂贵。

      一些会使系统调用变得昂贵的事情(与用户级函数调用相比):

      • 保存/恢复处理器状态
      • 更新虚拟内存环境以访问内核空间
      • 当系统调用完成时,可能会通过 OS 调度程序进行一次跳转

      【讨论】:

      • 为什么会发生这种情况? “保存/恢复处理器状态”
      猜你喜欢
      • 2019-12-05
      • 2010-10-02
      • 1970-01-01
      • 2010-09-09
      • 2014-06-09
      • 2011-05-24
      • 2020-02-20
      • 2010-11-18
      • 1970-01-01
      相关资源
      最近更新 更多