【发布时间】:2010-03-13 07:28:34
【问题描述】:
我正在阅读一本比较两种实现线程的方法的书,中间件线程和操作系统线程。我不知道这些句子的确切含义是什么: “然而,操作系统多线程的一个困难是性能开销。由于是操作系统参与切换线程,这涉及系统调用。这些通常比在用户级别执行的线程操作更昂贵,这是事务中间件正在运行。” 以及系统调用和性能的关系是什么?
【问题讨论】:
标签: multithreading operating-system
我正在阅读一本比较两种实现线程的方法的书,中间件线程和操作系统线程。我不知道这些句子的确切含义是什么: “然而,操作系统多线程的一个困难是性能开销。由于是操作系统参与切换线程,这涉及系统调用。这些通常比在用户级别执行的线程操作更昂贵,这是事务中间件正在运行。” 以及系统调用和性能的关系是什么?
【问题讨论】:
标签: multithreading operating-system
这本书可能有点过时了,中间件线程(又名纤维)大约在 10 年前很流行。是的,上下文切换相对昂贵,大约在 2000 到 10,000 个 CPU 指令之间。它们需要内核转换并获取全局锁。用户线程可以避免大部分成本,只需要切换 CPU 状态。
但这不是免费的:
后一个问题是大问题,炸掉缓存真的很贵。与内存相比,CPU 内核变得如此之快,以至于破坏缓存的成本与操作系统上下文切换相当。而且获得大量 CPU 内核很便宜。
【讨论】:
适用于大多数现代操作系统。 (Windows、*nix、MAC OS),操作系统内核驻留在受保护的地址空间中。并且为了保持该受保护空间的完整性,该空间只能从已知位置的用户空间进入。所以调用操作系统比在用户空间调用普通函数要贵一些。 http://en.wikipedia.org/wiki/System_call。
286 CPU 从用户空间到内核空间的速度相当慢,但最近的 CPU 架构,如当前的 x86 和 IA64,有专门设计的特殊指令,可以尽可能快地从用户空间到内核空间,并且虽然它仍然比用户空间中的普通函数调用更昂贵,但我认为这不足以证明本书所表明的关注程度。
【讨论】:
正如您引用的文本所说,系统调用通常比用户级线程操作更昂贵。
一些会使系统调用变得昂贵的事情(与用户级函数调用相比):
【讨论】: