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

时间:2010-03-13 07:28:34

标签: multithreading operating-system

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

3 个答案:

答案 0 :(得分:1)

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

但这不是免费的:

  • 您需要创建自己的日程安排程序
  • 当用户线程阻塞I / O操作时,所有用户线程将阻止
  • 用户上下文切换会烧掉CPU缓存。

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

答案 1 :(得分:0)

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

286 CPU从用户空间到内核空间的速度相当慢,但是最新的CPU架构,如当前的x86和IA64,都有专门的指令,专门用于尽可能快地从用户空间到内核空间的转换,以及虽然它仍然比用户空间中的正常函数调用更昂贵,但我认为这本书所表明的关注程度并不合理。

答案 2 :(得分:0)

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

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

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