第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

java 多線程訪問(wèn)mongodb速度和單線程差不多

java 多線程訪問(wèn)mongodb速度和單線程差不多

胡子哥哥 2019-04-07 09:38:24
我現(xiàn)在基于probalisticlatentsemanticindexing(plsa)做圖像檢索,我的方法和這篇論文很像,需要計(jì)算一個(gè)條件概率p(z|w,v,d),我直接定義成了“doublepzdwtwv[][][][];”簡(jiǎn)單地說(shuō),z是主題,w是英文單詞,v是視覺(jué)單詞,d是文檔,大小分別為12100500*7000,就是12個(gè)主題,100個(gè)英文單詞,500個(gè)視覺(jué)單詞,7000個(gè)文檔,double型的話算下來(lái)大概32G,其中z和d的數(shù)目是確定的,每個(gè)d的w和v的數(shù)目是不確定的。因?yàn)閿?shù)組不能全部放進(jìn)內(nèi)存,所以把它放進(jìn)數(shù)據(jù)庫(kù)中,我的數(shù)據(jù)庫(kù)是這樣設(shè)計(jì)的,把四維數(shù)組拆成二維數(shù)組,每次讀或?qū)懸粋€(gè)二維數(shù)組。我使用了40個(gè)線程跑算法,數(shù)據(jù)庫(kù)中在collection中每個(gè)鍵對(duì)應(yīng)的值是一個(gè)二維數(shù)組,每次計(jì)算完這個(gè)二維數(shù)組后就寫入數(shù)據(jù)庫(kù),我的方法是這樣的:publicsynchronizedvoidupdate(intd,intt,double[][][]topic_pro){if(ifTrainset)mongo.update(true,(d+1)*100+t,topic_pro[t]);elsemongo.update(false,(d+1)*100+t,topic_pro[t]);}pzdwtwv和pzdwtwv_test是不同的collection。mongo.update方法是這樣的:publicvoidupdate(booleanifTrainset,intkey,double[][]new_value){BasicDBObjectquery=newBasicDBObject().append("key",key);BasicDBObjectupdated_element=newBasicDBObject();updated_element.append("$set",newBasicDBObject().append("value",new_value));if(ifTrainset){p_z_d_wt_wv.update(query,updated_element,true,false);}else{p_z_d_wt_wv_test.update(query,updated_element,true,false);}}另外,運(yùn)行程序的時(shí)候,cpu利用率很低,大概7%~8%左右,但是內(nèi)存幾乎達(dá)到100%。請(qǐng)問(wèn)這個(gè)怎么解決
查看完整描述

2 回答

?
藍(lán)山帝景

TA貢獻(xiàn)1843條經(jīng)驗(yàn) 獲得超7個(gè)贊

對(duì)于題主的問(wèn)題,簡(jiǎn)單分析一下:
synchronized是不必要的,mongodb本身是線程安全的,而你的update方法只是一個(gè)簡(jiǎn)單的切換;
從你的問(wèn)題描述上看,應(yīng)該是計(jì)算密集型的任務(wù),對(duì)與計(jì)算密集型的任務(wù),一般ThreadNums=CpuNums+1,過(guò)多的線程數(shù)導(dǎo)致上下文頻繁的切換,反而會(huì)影響效率;
沒(méi)有給出mongodb的版本信息,在2.2版本之前,mongodb的lock粒度是server級(jí)別,在2.2級(jí)別之后,lock粒度是db級(jí)別,對(duì)于粗粒度的鎖,除非你的數(shù)據(jù)庫(kù)進(jìn)行了sharing,否則盡管兩個(gè)collection是不同的,單次每次寫(更新)操作時(shí),仍然會(huì)等待鎖,這也是與單線程性能差不多的主要原因;
benchmark測(cè)試,盡量需要減少硬件、軟件等外部因素的影響。對(duì)于你的問(wèn)題描述,無(wú)法看出這些,只有一個(gè)簡(jiǎn)單的多線程與單線程的區(qū)別,這在JVM層面的影響因素就有很多了,所以無(wú)法簡(jiǎn)單的給出性能的優(yōu)劣評(píng)價(jià)。
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-07
?
慕斯709654

TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個(gè)贊

本來(lái)就應(yīng)該差不多。
首先要搞明白的一點(diǎn)是,你的瓶頸在哪里?
其次,CPU密集型任務(wù)跑那么多線程竟然沒(méi)有慢很多?你有多少個(gè)CPU核?這種事情一般是一個(gè)核一個(gè)線程,多了反而因?yàn)樯舷挛那袚Q浪費(fèi)CPU時(shí)間。
另外,你確定你需要synchronized?
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-07
  • 2 回答
  • 0 關(guān)注
  • 337 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)