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