为什么我们不应该使用过多的线程
總覽
有一個普遍的論點,因為我們有很多核心,并且將來還會有更多核心,所以我們必須使用它們。 我們只是需要找到使用它們的最佳方法,而僅僅是因為我們不能意味著我們應該這樣做。
我們的目標是什么?
使用多個線程的充分理由是
- 使用一個線程的性能還不夠。
- 您已對您的應用程序進行了概要分析,以確保沒有低落的果實。
- 多線程可提高吞吐量,延遲或一致性。
使用多個線程的不好理由
僅僅因為我們可以使用更多的線程并不意味著我們應該這樣做。 多線程- 增加代碼的復雜性
- 還有其他就是要加快應用程序。 L1緩存比L3緩存快10到20倍,并且如果您可以通過優化內存使用和訪問來在L1緩存中花費更多的時間,那么與使用插槽中的每個CPU相比,您可以獲得更高的性能。
- 多線程可能會引入細微的,鮮為人知的錯誤,而單線程代碼不會出現這些錯誤。
- 多線程增加了同步,更多地使用了不可變對象,而不是回收可變對象。
- 即使典型性能更好,多線程也往往導致更差的抖動和更差的外殼性能。
簡而言之,除非有一些考慮,否則多線程更有可能使程序變慢而不是加速。 兩個CPU的速度最多可以快一倍,但如果不小心的話,很容易變慢十倍。 也就是說,您損失的比獲得的更多。
一個簡單的例子是計算斐波那契數。 這些很容易遞歸描述并創建許多線程。 因此,斐波那契數的計算通常用作如何使用大量線程的示例。 他們通常不提及的是,您創建的線程數等于答案,即它呈指數增長。 這意味著,雖然在一個循環/線程中進行迭代需要大約4 ms的時間來計算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
總結
以上是生活随笔為你收集整理的为什么我们不应该使用过多的线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Spring Form标签探索Spr
- 下一篇: 电脑系统硬盘分配(电脑系统硬盘分配方法)