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

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

如何手動(dòng)擼一個(gè)能夠滿足下列并發(fā)的隊(duì)列?

如何手動(dòng)擼一個(gè)能夠滿足下列并發(fā)的隊(duì)列?

四季花海 2019-05-24 15:59:42
在做puv統(tǒng)計(jì)時(shí)碰到的一個(gè)問(wèn)題,用戶請(qǐng)求過(guò)來(lái)會(huì)記錄為一個(gè)pv,記錄到redis中,但由于pv量太大會(huì)給redis造成過(guò)大壓力,所以做個(gè)緩存,當(dāng)pv滿10條了發(fā)一次。用了一個(gè)隊(duì)列ArrayList實(shí)現(xiàn),但隊(duì)列的插入、刪除在并發(fā)條件下不可行,所以在方法上加了synchronized:staticArrayListpvList=newArrayList();publicsynchronizedvoidcountPv(...){//........生成一個(gè)PV對(duì)象pvList.add(PV)if(pvList.size()>10){//前10個(gè)加到redisaddRedis(pvList.subList(0,10))}//刪除10個(gè)pvList.subList(0,10).clear();}但在壓力測(cè)試中,如果已滿負(fù)荷的連續(xù)壓測(cè),發(fā)現(xiàn)會(huì)丟掉一些pv,可能是synchronized造成的堵塞導(dǎo)致,如何更好的實(shí)現(xiàn)這個(gè)需求呢?每10個(gè)請(qǐng)求發(fā)一次,而后刪除,同時(shí)可以滿足不斷累加synchronized放到函數(shù)里面估計(jì)提升并不大,畢竟add,size,clear方法都必須滿足同步需求ConcurrnetLinkedQueue,Concurrent...Array刪除、查找的開(kāi)銷都非常大,而且貌似沒(méi)法用于這種場(chǎng)合p.s.您能留段偽碼就最好了
查看完整描述

2 回答

?
蕭十郎

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

publicsynchronizedvoidcountPv(...){
//........生成一個(gè)PV對(duì)象
pvList.add(PV)
if(pvList.size()>10){
addRedis(pvList.subList(0,10))
}
pvList.subList(0,10).clear();
}
pvList.subList(0,10).clear();這句代碼不應(yīng)該寫(xiě)到if里面嗎?既然pvList是static的(類變量),那么countPV也應(yīng)該是static的才對(duì),這樣synchronize使用的鎖才會(huì)是class,而不是對(duì)象。
                            
查看完整回答
反對(duì) 回復(fù) 2019-05-24
?
蠱毒傳說(shuō)

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

不知道你說(shuō)的滿負(fù)荷壓測(cè)時(shí)丟pv指的是什么,有沒(méi)有記錄這種情況下,服務(wù)器返回的狀態(tài)碼是什么?是因?yàn)槌瑫r(shí)么?如果是因?yàn)閴毫^(guò)大超出服務(wù)器載能力,換用或其他數(shù)據(jù)結(jié)構(gòu)也不見(jiàn)得好到哪去,如果想解鎖synchronized,可能試試多例模式.每個(gè)服務(wù)線程創(chuàng)建自己私有的緩存.
                            
查看完整回答
反對(duì) 回復(fù) 2019-05-24
  • 2 回答
  • 0 關(guān)注
  • 415 瀏覽
慕課專欄
更多

添加回答

舉報(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)