課程
/后端開發
/Java
/Java高并發秒殺API之高并發優化
我知道使用為了優化,但是不知道為什么。
2017-06-20
源自:Java高并發秒殺API之高并發優化 3-1
正在回答
原來執行的流程
update(發送在mysql網絡時間+gc時間) + insert(發送在mysql網絡時間+gc時間)
因為update同一行會導致行級鎖,而insert是可以并行執行的。
1.如果先update, update在前面會加鎖
鎖 + update(發送在mysql網絡時間+gc時間) +?insert(發送在mysql網絡時間+gc時間) + 提交鎖
其實的線程就要等,這個鎖提交才能執行。
2.如果先insert,
insert(發送在mysql網絡時間+gc時間) + ?鎖+ update(發送在mysql網絡時間+gc時間)?+ 提交鎖
其實的線程可以并發insert. 這樣子會減少鎖的時長
慕粉18810003712 提問者
慕村8951117
https://blog.csdn.net/and1kaney/article/details/51214001
看場景二。
insert是會加鎖的,但是這個鎖不影響同時插入。什么叫并發?并發指的是多線程對統一資源進行爭奪。但是當我們對同一張表中并發寫入的時候,對什么資源進行爭奪了呢?從場景2中可以很明顯的看出,當有兩個事物都在insert的時候,在commit之前都可以插入。
好的,那解釋一下為什么insert要放在update之前:
1.因為insert的通過用戶id+商品id作為聯合主鍵,因此實際上插入操作是可以并行的。2.如果某個用戶多次刷新提交數據,都會被判定為是無效數據,無需update。
簡單來講就是insert在后面的話就會等鎖競爭,放到前面了insert就可以并行執行了,當中就少了insert占用的時間了,放后面會等兩個鎖競爭,放前面就等一個鎖。
舉報
Java實現高并發秒殺API的第四門課,小伙伴一定可以從中受益
1 回答java高并發秒殺API之業務分析
3 回答求Java高并發秒殺課程源碼
2 回答優化分析高并發課程
1 回答《java高并發秒殺API》實現之后怎么進行性能測試??
1 回答關于update和insert順序的問題
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2017-06-21
原來執行的流程
update(發送在mysql網絡時間+gc時間) + insert(發送在mysql網絡時間+gc時間)
因為update同一行會導致行級鎖,而insert是可以并行執行的。
1.如果先update, update在前面會加鎖
鎖 + update(發送在mysql網絡時間+gc時間) +?insert(發送在mysql網絡時間+gc時間) + 提交鎖
其實的線程就要等,這個鎖提交才能執行。
2.如果先insert,
insert(發送在mysql網絡時間+gc時間) + ?鎖+ update(發送在mysql網絡時間+gc時間)?+ 提交鎖
其實的線程可以并發insert. 這樣子會減少鎖的時長
2019-03-14
https://blog.csdn.net/and1kaney/article/details/51214001
看場景二。
insert是會加鎖的,但是這個鎖不影響同時插入。什么叫并發?并發指的是多線程對統一資源進行爭奪。但是當我們對同一張表中并發寫入的時候,對什么資源進行爭奪了呢?從場景2中可以很明顯的看出,當有兩個事物都在insert的時候,在commit之前都可以插入。
好的,那解釋一下為什么insert要放在update之前:
1.因為insert的通過用戶id+商品id作為聯合主鍵,因此實際上插入操作是可以并行的。2.如果某個用戶多次刷新提交數據,都會被判定為是無效數據,無需update。
2018-07-29
簡單來講就是insert在后面的話就會等鎖競爭,放到前面了insert就可以并行執行了,當中就少了insert占用的時間了,放后面會等兩個鎖競爭,放前面就等一個鎖。