C#.NET高級(jí)編程高并發(fā)必備技巧 - 多線程搶庫(kù)存時(shí)加鎖
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
前言鎖最為常見(jiàn)的應(yīng)用就是高并發(fā)的情況下,庫(kù)存的控制。本次只做簡(jiǎn)單的單機(jī)鎖介紹。 正文 直接看代碼 每請(qǐng)求一次庫(kù)存-1. 假如庫(kù)存1000,在1000個(gè)人請(qǐng)求之后,庫(kù)存將變?yōu)?
本次測(cè)試使用Jmeter進(jìn)行測(cè)試。先初始化庫(kù)存為1000。 Jmeter 設(shè)置如下,一個(gè)線程請(qǐng)求1000次,再去查看庫(kù)存剛好為0,沒(méi)有任何問(wèn)題: 調(diào)整一下測(cè)試參數(shù),5個(gè)人同時(shí)請(qǐng)求,各請(qǐng)求200次。再去查看庫(kù)存 發(fā)現(xiàn)請(qǐng)求后,還有279的庫(kù)存。明明請(qǐng)求了1000次。但是還有279的庫(kù)存,明顯不對(duì)。 造成次問(wèn)題的原因很簡(jiǎn)單,就是在庫(kù)存還沒(méi)完全減的情況下,有另外一個(gè)、或多個(gè)線程同時(shí)發(fā)出了請(qǐng)求,而庫(kù)存只減少了1 只要還有庫(kù)存,就可以繼續(xù)請(qǐng)求,到了庫(kù)存完全為0的時(shí)候,已經(jīng)超過(guò)1000個(gè)人進(jìn)行了請(qǐng)求。與實(shí)際庫(kù)存不符合。 為了解決這個(gè)問(wèn)題。我們簡(jiǎn)單調(diào)整一下代碼:
聲明一個(gè)靜態(tài)變量,然后再方法體內(nèi) 使用lock。調(diào)整代碼后,再次進(jìn)行測(cè)試: 發(fā)現(xiàn) 請(qǐng)求1000次后,庫(kù)存為0。調(diào)整測(cè)試參數(shù) 100人*10次。測(cè)試結(jié)果依然為0。 到此為止,問(wèn)題解決。 但是,實(shí)際應(yīng)用場(chǎng)景中,高并發(fā)的應(yīng)用,都會(huì)多機(jī)分布式部署。分布式部署要怎么解決?大家思考一下。
- EOF - 該文章在 2023/9/20 12:17:52 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |