校本教研網(wǎng)站建設(shè)網(wǎng)絡(luò)營銷的方法有哪些?舉例說明
一、線程安全活躍態(tài)問題
線程因?yàn)槟臣虑榈貌坏綀?zhí)行
1、活鎖
線程沒有阻塞,但一直重復(fù)執(zhí)行某個操作,并且失敗重試
1)例子
- 在消息隊(duì)列中,消費(fèi)者沒有正確ack消息,并且執(zhí)行過程中報錯了,消息會被重復(fù)執(zhí)行,一直失敗并重試
- for循環(huán)忘記break
- 遞歸忘記寫結(jié)束條件
2)解決方案
等待隨機(jī)時間,按照時間輪去重試,到達(dá)一定時間退出重試
2、 饑餓
線程因?yàn)闊o法訪問所需資源而一直在等待
1)兩種情況
- 線程優(yōu)先級問題,不合理分配,導(dǎo)致部分線程始終無法獲得CPU資源而一直無法執(zhí)行
例如,讀寫鎖,讀優(yōu)先,會造成饑餓,寫一直在等 - 一些線程在臨界區(qū)無限循壞等待資源,讓其他線程一直拿不到鎖進(jìn)去臨界區(qū),進(jìn)入了饑餓狀態(tài)
2)解決方案
- 保證資源充足(但很多場景下,資源稀缺無法解決)
- 公平分配資源(使用公平鎖,FIFO策略)
- 避免持有鎖的線程長時間執(zhí)行
3、死鎖
多個線程互相等待對方釋放鎖的過程
二、競態(tài)條件
多個線程同時訪問相同資源,如果對資源的訪問順序敏感,就稱存在競態(tài)條件
最常見的情況
- 先檢查后執(zhí)行:檢查值的狀態(tài),根據(jù)這個狀態(tài)去更新,但期間可能被其它線程修改,導(dǎo)致執(zhí)行結(jié)果出現(xiàn)各種問題
- 延遲初始化,單例