亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                ConcurrentHashMap性能測試

                之前在測試commons-pool2相關實現(xiàn)的時候,發(fā)現(xiàn)線程接近500時候,性能瓶頸降低非常厲害,就好像碰到了總體性能的天花板一樣,隨著線程繼續(xù)增加而單線程性能急速下降的現(xiàn)象。當時粗略判斷其中一個原因是用來存儲對象映射關系的java.util.concurrent.ConcurrentHashMap存在瓶頸導致。

                所以今天我特意來測試一下java.util.concurrent.ConcurrentHashMap的查詢性能,其他增改的功能暫時不做測試了。關于另外一個可能的原因java.util.concurrent.atomic.AtomicLong,我們下期再測。有興趣的可以先看看我之前對于更強大的多線程計數(shù)器java.util.concurrent.atomic.LongAdder的性能測試:性能測試中的LongAdder。下面是之前遇到兩種不同類型的對象池的性能測試文章:通用池化框架GenericObjectPool性能測試、通用池化框架GenericKeyedObjectPool性能測試。

                測試方案

                先說一下思路和場景設計。思路還是沿用之前的性能測試,通過固定線程的性能模型進行測試,通過調(diào)整次數(shù)和線程數(shù)來測試java.util.concurrent.ConcurrentHashMap的性能表現(xiàn)。場景設計上我先把java.util.concurrent.ConcurrentHashMap添加N個key和value,然后通過多線程隨機從這些key里面取值。

                這樣本地測試就有了三個變量線程數(shù)、次數(shù)、key的數(shù)量,本次重點放在了200線程以上的性能表現(xiàn)。

                PS:硬件和軟件配置參考以前的文章,這里就不多說了。

                測試用例

                照例方案依舊使用FunTester性能測試框架提供的能力,采取Groovy腳本實現(xiàn)。相信有一定Java基礎的同學閱讀起來是沒有問題的。

                package com.funtest.groovytestimport com.funtester.base.constaint.FixedThreadimport com.funtester.base.constaint.ThreadBaseimport com.funtester.frame.SourceCodeimport com.funtester.frame.execute.Concurrentimport java.util.concurrent.ConcurrentHashMapclass ConcurrentHashMapTest extends SourceCode { static ConcurrentHashMap maps = new ConcurrentHashMap() static int times = 1_0000 static int threads = 200 static int num = 100 static def desc = “ConcurrentHashMap性能測試” public static void main(String[] args) { 1.upto(num) { maps.put(it, it) } ThreadBase.COUNT = false RUNUP_TIME = 0 new Concurrent(new FunTester(), threads, desc).start() } private static class FunTester extends FixedThread { FunTester() { super(null, times, true) } @Override protected void doing() throws Exception { maps.get(getRandomInt(num)) } @Override FunTester clone() { return new FunTester() } }}

                測試結果

                由于測試中基本都觸碰到硬件(CPU)瓶頸,所以本次也就不記錄CPU使用率了,相當于都是在CPU資源有限情況下的性能測試數(shù)據(jù),其實測試中發(fā)現(xiàn)次數(shù)影響也不大。

                線程數(shù) 次數(shù)(千) key數(shù)量 單線程QPS 200 10 100 3038 200 20 100 3539 200 40 100 4066 200 80 100 4334 200 10 200 2823 200 20 200 3587 200 40 200 4736 200 10 400 2919 200 10 50 2873 200 10 20 3218 200 10 1000 3256 300 10 100 1893 300 20 100 2514 300 40 100 3214 300 20 300 1798 300 20 500 2832 500 20 100 1722 500 20 1000 1509 1000 20 1000 816 1000 10 100 724

                測試到此,結論比較明顯了,影響java.util.concurrent.ConcurrentHashMap的主要因素還是機器CPU資源不夠用了。對于相同的資源情況下,線程數(shù)更低自然獲得更強的單線程性能,如果增加線程確實可以獲取更大的總體QPS。在key值方面,值越多,QPS越低。在測試次數(shù)上,自然是字數(shù)越多,QPS也大,也符合之前多次測試中的結論。

                但是當我重新檢查代碼的時候卻發(fā)現(xiàn)一個問題,在com.funtest.groovytest.ConcurrentHashMapTest.FunTester#doing方法中其實還有一段耗時的請求,就是com.funtester.frame.SourceCode#getRandomInt,經(jīng)過我重新測試,發(fā)現(xiàn)java.util.concurrent.ConcurrentHashMap的性能得到了十幾倍的提升。

                不得不說我大意了,本期文章標題應當修改為java.util.concurrent.ThreadLocalRandom性能測試。

                一下是com.funtester.frame.SourceCode#getRandomInt的內(nèi)容:

                /** * 獲取隨機數(shù),獲取1~num 的數(shù)字,包含 num * * @param num 隨機數(shù)上限 * @return 隨機數(shù) */ public static int getRandomInt(int num) { return ThreadLocalRandom.current().nextInt(num) + 1; }

                我依此法重新測試了java.util.concurrent.atomic.AtomicLong,發(fā)現(xiàn)也是QPS超高,排除了我之前的想法??磥韈ommons-pool2的瓶頸不在這兩個地方。以后等我仔細再研究研究,有結論再跟大家分享。

                Have Fun ~ Tester !

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權歸原作者所有,如有侵權請聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年6月16日 12:14
                下一篇 2022年6月16日 12:14

                相關推薦

                • 11月27日哈爾濱疫情最新消息:昨日新增本土85+183

                  黑龍江省最新疫情通報 11月26日0-24時,全省新增本土確診病例132例(含無癥狀感染者轉確診病例25例)。哈爾濱市85例(香坊區(qū)22例、南崗區(qū)17例、道里區(qū)17例、呼蘭區(qū)7例、…

                  2022年11月27日
                • 漢中昨日新增本土4+3 11月27日漢中疫情最新通報

                  11月26日陜西新增51例本土確診病例 新增902例本土無癥狀感染者 11月26日0-24時,新增報告本土確診病例51例(輕型49例、普通型2例),其中安康28例(1例為無癥狀轉確…

                  2022年11月27日
                • 渭南疫情最新情況11月27日通報:昨日新增本土7+17

                  11月26日陜西新增51例本土確診病例 新增902例本土無癥狀感染者 11月26日0-24時,新增報告本土確診病例51例(輕型49例、普通型2例),其中安康28例(1例為無癥狀轉確…

                  2022年11月27日
                • 短視頻策劃內(nèi)容的3個要點(短視頻策劃內(nèi)容怎么做)

                  短視頻在制作時,內(nèi)容框架非常重要。如果直奔主題,然后結束,聚卓告訴你,這樣的短視頻已經(jīng)過時了。現(xiàn)在的短視頻需要框架的,但不是任何框架,它需要一種易于理解和消化的框架。而且,現(xiàn)在大多…

                  2022年11月27日
                • 今天杭州疫情最新消息:0-10時新增1+28

                  11月26日0-10時,杭州新增1例本土新冠病毒肺炎確診病例(輕型),為主動就診發(fā)現(xiàn);杭州新增28例新冠病毒無癥狀感染者,12例為卡口攔截發(fā)現(xiàn),9例為集中隔離點檢出,6例為居家隔離…

                  2022年11月26日
                • 11月26日齊齊哈爾市疫情最新消息通報:昨日本土無癥狀感染者69例

                  11月25日0-24時,全省新增本土確診病例134例(含無癥狀感染者轉確診病例9例)。哈爾濱市117例(南崗區(qū)29例、香坊區(qū)28例、道里區(qū)22例、呼蘭區(qū)9例、道外區(qū)8例、松北區(qū)6例…

                  2022年11月26日
                • 鄭州市疫情11月26日最新消息通報:昨日新增本土180+777

                  11月25日0—24時,河南省新增本土確診病例186例(鄭州市180例,其中91例為隔離管控發(fā)現(xiàn)、3例為重點人群篩查發(fā)現(xiàn)、40例為社區(qū)篩查發(fā)現(xiàn)、40例為主動就診發(fā)現(xiàn)、5例為無癥狀感…

                  2022年11月26日
                • 11月26日黑河市疫情最新消息通報:昨日新增本土3+26

                  11月25日0-24時,全省新增本土確診病例134例(含無癥狀感染者轉確診病例9例)。哈爾濱市117例(南崗區(qū)29例、香坊區(qū)28例、道里區(qū)22例、呼蘭區(qū)9例、道外區(qū)8例、松北區(qū)6例…

                  2022年11月26日
                • 11月26日佳木斯市疫情最新消息通報:昨日新增本土5+14

                  11月25日0-24時,全省新增本土確診病例134例(含無癥狀感染者轉確診病例9例)。哈爾濱市117例(南崗區(qū)29例、香坊區(qū)28例、道里區(qū)22例、呼蘭區(qū)9例、道外區(qū)8例、松北區(qū)6例…

                  2022年11月26日
                • 11月26日綏化市疫情最新消息通報:昨日新增本土5+105

                  11月25日0-24時,全省新增本土確診病例134例(含無癥狀感染者轉確診病例9例)。哈爾濱市117例(南崗區(qū)29例、香坊區(qū)28例、道里區(qū)22例、呼蘭區(qū)9例、道外區(qū)8例、松北區(qū)6例…

                  2022年11月26日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時間:周一至周五,10:30-18:30,節(jié)假日休息