Junior — Middle
Көп агымдуу системаларды иштеп чыгууда өзара тоскоолдук маселелерине туш болдуңузбу?
sobes.tech AI
AIден жооп
Ооба, көп иштеген системаларды иштеп чыгууда, мен deadlock (өлүм кагазы) маселеси менен беттешкенмин. Бул — эки же андан көп жиптер дайыма бири-бирин бөгөп, ресурстарды бошотконду күтүп жатышат.
Deadlock-торду алдын алуу үчүн, мен төмөнкү практикаларды колдонуп жатам:
- Ар дайым бир эле тартипте бир нече блокту алуу.
- Блокторду кармоо убактысын кыскартуу.
- Блокту алуу аракетинде тайм-ауттарды колдонуу.
- Жогорку деңгээлдеги синхрондоштуруу primitives, мисалы, Goдогу каналдар.
Мисал катары, Goдогу жөнөкөй deadlock:
var mu1, mu2 sync.Mutex
func f1() {
mu1.Lock()
defer mu1.Unlock()
time.Sleep(time.Second)
mu2.Lock()
defer mu2.Unlock()
}
func f2() {
mu2.Lock()
defer mu2.Unlock()
time.Sleep(time.Second)
mu1.Lock()
defer mu1.Unlock()
}
Бул жерде, f1 жана f2 бири-бирин бөгөп калышы мүмкүн, эгерде экөө биринчи mutexти алышып, экинчисин күтүп жатышса. Бул кырдаалды алдын алуу үчүн, mutexтерди алуу тартибин координациялоо керек.