2010-03-13 69 views
1

我正在閱讀一本比較兩種實現線程,中間件線程和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

回答

1

旅行的書可能是一個有點過時,中間件線程(又名纖維)是流行的ABO十年前。是的,上下文切換相對昂貴,大約在2000到10,000個CPU指令之間。他們需要內核轉換並獲取全局鎖。用戶線程可以避免大部分成本,只需要切換CPU狀態。

但這並不是免費的:

  • 你需要創建自己的調度
  • 當一個I/O操作的用戶線程塊,所有用戶線程將阻塞
  • 用戶上下文切換會觸發CPU緩存。

後一個問題是大問題,吹緩存真的很貴。與內存相比,CPU內核變得如此之快,以至於摧毀緩存的成本變得與OS上下文切換相當。獲得大量CPU內核很便宜。

0

對於大多數現代操作系統。 (Windows,* nix,MAC OS)時,操作系統內核駐留在受保護的地址空間中。爲了保持受保護空間的完整性,該空間只能從已知位置的用戶空間輸入。因此,調用操作系統比在用戶空間中進行普通函數調用要昂貴些。 http://en.wikipedia.org/wiki/System_call

286 CPU從用戶空間到內核空間的速度相當慢,但是更新的CPU體系結構(例如當前的x86和IA64)具有特別的指令,專門用於儘可能快地從用戶空間轉換到內核空間,儘管它比用戶空間中的普通函數調用還要昂貴,但我認爲不應證明本書所指出的關注程度。

0

正如您引用的文字所說,系統調用通常比用戶級別的線程操作更昂貴。

有些事情,可以使一個系統調用昂貴(相比用戶級函數調用):

  • 保存/恢復的處理器狀態
  • 更新虛擬存儲環境中訪問內核空間
  • 系統調用完成時
  • ,有可能是通過OS調度
+0

爲什麼會出現這種情況? 「保存/恢復處理器狀態」 – ghedas 2010-03-13 08:04:36