對於某些操作系統(OpenBSD & ...),線程僅限用戶區域,主要用於兼容性。忽略這種類型的實現,內核級線程的使用與多進程設計相比如何?每個安全影響是什麼?表現如何?發展的複雜性?與多線程應用程序相比,多進程系統的預期開銷是多少?
0
A
回答
0
線程默認分享所有內容。進程默認情況下沒有共享。所以,唯一的區別在於分享的數量。認識到,Plan 9和Linux提供了一個系統調用(用於Plan 9的rfork()
,用於Linux的clone()
),可以創建一個新進程,一個新線程或兩者之間的內容。
某些平臺不支持fork()
(例如:Win32,Java);這使得創建一個新的流程非常昂貴,這導致人們普遍認爲線程有助於提高性能。
線程比流程創建的要輕,但POSIX API可以非常高效地創建流程。但是,有些系統在創建新流程方面速度很慢。
在單個CPU計算機上,同一進程的線程之間的上下文切換可能比不同進程之間的上下文切換(例如:不需要刷新TLB)。您需要進行上下文切換,才能對性能產生重大影響。在SMP機器上,在不同內核中運行的線程之間共享數據可能意味着某些數據需要在高速緩存之間移動(高速緩存線彈跳)。預測多線程程序的性能可能很難。
安全方面,由於線程共享所有內容,這意味着線程之間沒有任何保護,所以從某種意義上說,它就像是回到虛擬內存操作系統之前的那些日子。對於複雜性,正確編寫多線程程序比正確編寫非多線程程序(有些人說難度更大)要困難得多。更糟糕的是,編寫多線程程序顯然比編寫事件驅動程序對初學者更簡單。
相關問題
- 1. 減少線程上下文的開銷,在多線程應用程序
- 2. 從多線程程序調用系統()
- 3. 與多線程一起登錄多進程應用程序
- 4. Monodroid添加到應用程序的開銷是多少
- 5. 多線程Web應用程序與多線程Web服務器
- 6. C++多線程std庫:比預期慢
- 7. 應用程序中的最佳線程數應該是多少?
- 8. 與HTTP相比,使用HTTPS的開銷是多少?
- 9. java如何處理多線程?比進程更多的線程
- 10. 是否多線程Java進程比操作系統的單線程程序更經常地調度?
- 11. 多線程應用程序
- 12. 性能 - 多線程或者多進程應用程序
- 13. Java多線程系統
- 14. Valgrind與多線程應用程序
- 15. PyMySQL與Django,多線程應用程序
- 16. 多線程應用程序與gtkD
- 17. 調試多線程應用程序後系統錯誤
- 18. 什麼是多線程應用程序?
- 19. 線程還是多進程?
- 20. .net微型框架中創建線程的開銷是多少?
- 21. 程序多線程,而不是打印預期的輸出
- 22. 多線程訪問多線程應用程序中的相同代碼
- 23. Apache Cordova添加到應用程序有多少開銷?
- 24. 與Geforce相比,Tesla的內核開銷少了多少?
- 25. 許多NSOperationQueues =多少線程?
- 26. Ruby中的多線程系統調用
- 27. 啓動iOS應用程序需要多少線程(至少)?
- 28. 編程比較大的,線程應用程序的舊系統
- 29. J2ME應用程序有多少手機操作系統支持
- 30. 當使用線程時,FFmpeg使用的線程數比我預期的要多。
某些處理器在內核之間共享緩存。考慮到具有共享緩存的四核處理器,多進程IPC如何與多線程共享內存進行比較? – user1066701