Блокҳои оптимистӣ ва песимистӣ чистанд?
sobes.tech AI
Ҷавоб аз AI
Душвори оптимистикӣ ва песимистикӣ — ин усулҳои идоракунии дастрасии ҳамзамон ба маълумоти умумӣ дар муҳитҳои рақобатнок (барномаҳои бисёрсӯзишворӣ, пойгоҳи додаҳо).
Душвори песимистикӣ:
Гумон мекунад, ки низоъҳо дар вақти дастрасӣ ба маълумот мумкин мебошанд. Пеш аз гирифтани дастрасӣ ба манбаъ, сӯзишворӣ ё транзаксия онро мепӯшонад (пӯшиши истисноӣ ё тақсимшуда). Сӯзишворӣҳои дигар, ки кӯшиш мекунанд ба он дастрасӣ пайдо кунанд, интизор мешаванд, то ки пӯшиш бардошта шавад.
- Фоидаҳо: Таъмини муттаҳидии маълумот, содда дар иҷро дар муҳитҳои бо рақобат кам.
- Норасоиҳо: Мумкин аст, ки ба бандшавиҳо (deadlocks) оварда расонад, кам кардани қобилияти интиқол дар муҳитҳои бо рақобат баланд.
- Маслиҳатҳо: калимаи
synchronizedдар Java, пӯшишҳо дар сатҳи сатр ё ҷадвал дар пойгоҳи додаҳо.
// Намунаи пӯшиши песимистикӣ дар Java
public class Counter {
private int count = 0;
public synchronized void increment() {
count++; // Пӯшиш дар объект, танҳо як сӯзишворӣ метавонад ин методро ҳамзамон иҷро кунад
}
public synchronized int getCount() {
return count;
}
}
Душвори оптимистикӣ:
Гумон мекунад, ки низоъҳо дар вақти дастрасӣ ба маълумот кам мебошанд. Дастрасӣ ба маълумот бидуни пӯшишҳо сурат мегирад. Пеш аз нигоҳ доштани тағирот, санҷида мешавад, ки маълумот аз ҷониби дигар сӯзишворӣ тағир ёфтааст ё не. Агар тағир ёфта бошад, амалиёт бекор карда мешавад ва одатан такрор мешавад (retry).
- Фоидаҳо: қобилияти баланд дар интиқол дар муҳитҳои бо рақобат кам, бе мушкилоти deadlocks.
- Норасоиҳо: метавонанд низоъҳо ба вуҷуд оянд, ки талаб мекунанд такрор, ки логикаро мураккаб мекунад. Барои амалиёти дарозмуддат ё бо эҳтимолияти баланд низоъҳо мувофиқ нест.
- Маслиҳатҳо: Compare-And-Swap (CAS) амалҳо, идоракунии нусхаҳо дар пойгоҳи додаҳо (масалан, истифодаи сутуни нусха ё тамғаи вақт).
// Намунаи душвори оптимистикӣ бо истифодаи CAS (java.util.concurrent.atomic)
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicCounter {
private AtomicInteger count = new AtomicInteger(0);
public void increment() {
// кӯшиши афзоиши атомӣ
// Агар арзиш байни хондан ва кӯшиши навсозӣ тағир ёбад, амалиёт такрор мешавад
count.incrementAndGet();
}
public int getCount() {
return count.get();
}
}
Мувофиқат:
| Хусусият | Душвори песимистикӣ | Душвори оптимистикӣ |
|---|---|---|
| Гумон | Низоъҳо эҳтимолӣ | Низоъҳо кам эҳтимолӣ |
| Дастрасӣ | Пеш аз дастрасӣ пӯшиш истифода мешавад | Дастрасӣ бе пӯшиш, санҷиш ҳангоми навиштани маълумот |
| Дар ҳолати баланд будани низоъҳо | Мумкин аст, ки пӯшишҳо ба вуҷуд оянд, қобилияти интиқолро кам мекунанд | Такрорҳои зиёд, кам кардани самаранокӣ |
| Дар ҳолати паст будани низоъҳо | Мумкин аст, ки хароҷотҳои иловагӣ ба вуҷуд оранд | Баланд будани қобилияти интиқол |
| Масъалаи deadlock | Мумкин аст, ки рух диҳад | Мумкин нест (аз нуқтаи назари дастрасии рақобатӣ ба манбаъ) |