操作系统多线程有哪些困难?

问题描述:

我正在阅读一本比较两种实现线程,中间件线程和OS线程的方式的书。我不知道这些句子的意思究竟是什么: “然而,操作系统多线程的困难在于性能开销,因为涉及切换线程的操作系统涉及系统调用,比在用户级执行的线程操作更昂贵,这是交易中间件运行的地方。“ 什么是系统调用和性能的关系?操作系统多线程有哪些困难?

+0

问题是什么? – 2010-03-13 07:34:07

+0

这已更新! – ghedas 2010-03-13 07:41:46

+0

下面是一个非常宽泛的差异概述http://www.cs.cf.ac.uk/Dave/C/node29.html#SECTION002920000000000000000 – zebrabox 2010-03-13 11:12:22

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

但这并不是免费的:

  • 你需要创建自己的调度
  • 当一个I/O操作的用户线程块,所有用户线程将阻塞
  • 用户上下文切换会触发CPU缓存。

后一个问题是大问题,吹缓存真的很贵。与内存相比,CPU内核变得如此之快,以至于摧毁缓存的成本变得与OS上下文切换相当。获得大量CPU内核很便宜。

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

286 CPU从用户空间到内核空间的速度相当慢,但是更新的CPU体系结构(例如当前的x86和IA64)具有特别的指令,专门用于尽可能快地从用户空间转换到内核空间,尽管它比用户空间中的普通函数调用还要昂贵,但我认为不应证明本书所指出的关注程度。

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

有些事情,可以使一个系统调用昂贵(相比用户级函数调用):

  • 保存/恢复的处理器状态
  • 更新虚拟存储环境中访问内核空间
  • 系统调用完成时
  • ,有可能是通过OS调度
+0

为什么会出现这种情况? “保存/恢复处理器状态” – ghedas 2010-03-13 08:04:36