进程比线程更多资源_为什么我们不应该使用比我们需要更多的线程
進程比線程更多資源
總覽
有一個普遍的論點,因為我們有很多核心,并且將來還會有更多核心,所以我們必須使用它們。 我們只是需要找到使用它們的最佳方法,而僅僅是因為我們不能意味著我們應該這樣做。
我們的目標是什么?
使用多個線程的充分理由是
- 使用一個線程的性能還不夠。
- 您已對應用程序進行了概要分析,以確保不會有低落的果實。
- 多線程可提高吞吐量,延遲或一致性。
使用多個線程的不好理由
僅僅因為我們可以使用更多的線程并不意味著我們應該這樣做。 多線程- 增加代碼的復雜性
- 還有其他就是要加快應用程序。 L1緩存比L3緩存快10到20倍,如果您可以通過優化內存使用和訪問來在L1緩存中花費更多的時間,則與使用插槽中的每個CPU相比,您可以獲得更高的性能。
- 多線程可能會引入細微的,鮮為人知的錯誤,而單線程代碼根本不會出現這些錯誤。
- 多線程增加了同步,更多地使用了不可變對象,而不是回收可變對象。
- 即使典型性能更好,多線程也往往導致更差的抖動和更糟的性能。
簡而言之,除非有人考慮,否則多線程更有可能使程序變慢而不是加速。 兩個CPU的速度最多可以快一倍,但如果不小心的話,很容易變慢十倍。 也就是說,您損失的比獲得的更多。
一個簡單的例子是計算斐波納契數。 這些很容易遞歸地描述并創建許多線程。 因此,斐波那契數的計算通常用作如何使用大量線程的示例。 他們經常沒有提到的是,您創建的線程數等于答案,即它呈指數增長。 這意味著,雖然在一個循環/線程中進行迭代大約需要4毫秒來計算fib(69),但多線程版本將創建數萬億個線程,并且如果不崩潰,其花費的時間將比宇宙的壽命還要長。
但是,如果我有空閑的CPU,那是在浪費它們。
如果要使用每個CPU,只需為每個CPU編寫一個繁忙的等待線程即可,完成后,每個CPU的使用率都是100%
假設您要從A到B行駛,有時您可以走一條街,有時走四條街會更快。 但是在A和B附近有20條街道,您應該沿著所有20條街道上下走,因為否則它們就沒有意義了,對!!
結論
如果您專注于系統工程設計,以便于開發和維護,那么您將需要最簡單的解決方案來解決您的問題。 如果那意味著您不使用100%的網絡帶寬,100%的磁盤空間,100%的內存或100%的CPU,那也許是一件好事。
翻譯自: https://www.javacodegeeks.com/2013/11/why-we-shouldnt-use-more-threads-than-we-need-to.html
進程比線程更多資源
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的进程比线程更多资源_为什么我们不应该使用比我们需要更多的线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 封狼居胥是哪位历史人物(历史上有5位将领
- 下一篇: 刷新命令快捷键(刷新 快捷键)