我正在閱讀一本比較兩種實現線程,中間件線程和OS線程的方式的書。我不知道這些句子的意思究竟是什麼: 「然而,操作系統多線程的困難在於性能開銷,因爲涉及切換線程的操作系統涉及系統調用,比在用戶級執行的線程操作更昂貴,這是交易中間件運行的地方。「 什麼是系統調用和性能的關係?操作系統多線程有哪些困難?
回答
旅行的書可能是一個有點過時,中間件線程(又名纖維)是流行的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調度
爲什麼會出現這種情況? 「保存/恢復處理器狀態」 – ghedas 2010-03-13 08:04:36
- 1. Haskell多線程有多困難?
- 2. 哪些是困難模式?
- 3. OpenCV支持哪些Android操作系統?
- 4. 系統輸出困難
- 5. forkIO線程和操作系統線程
- 6. 困難柱柱線協會/操作
- 7. 爲什麼要構建移動操作系統非常困難?
- 8. Linux操作系統:系統()+ SIGCHLD處理多線程+
- 9. i7處理器與Windows8操作系統的多線程問題操作系統
- 10. C#線程困難
- 11. 在多對多的關係中做一個「哪裏」有困難
- 12. 將現有文檔系統遷移到Sharepoint;這有多困難?
- 13. 操作系統有多難儘量減少TLB沖刷?
- 14. 進程和線程在操作系統
- 15. c - 位操作困難
- 16. Netbeans平臺操作困難
- 17. jQuery AJAX操作的困難
- 18. 哪個操作系統的線程編程足以利用多個內核?
- 19. 操作系統和併發線程
- 20. 多處理器和多線程 - 操作系統
- 21. 加劇文件系統困難
- 22. C++/clrIntelliSense:沒有操作符「+」匹配這些操作數。系統:雙^ +系統:雙^
- 23. 多操作系統程序兼容性
- 24. 多核和操作系統
- 25. 多操作系統DBMS
- 26. 是java的多線程對操作系統可見
- 27. 包含哪些字體(即默認安裝)與哪些操作系統?
- 28. 關於進程調度的困惑(操作系統)
- 29. 科爾多瓦android文件系統困難
- 30. Java線程和操作系統線程之間的通信
問題是什麼? – 2010-03-13 07:34:07
這已更新! – ghedas 2010-03-13 07:41:46
下面是一個非常寬泛的差異概述http://www.cs.cf.ac.uk/Dave/C/node29.html#SECTION002920000000000000000 – zebrabox 2010-03-13 11:12:22