Sobes.tech
Middle

Оптимисттик жана пессимисттик блоктор эмне?

sobes.tech AI

AIден жооп

Оптимисттик жана песимисттик блоктоолор — бул атаандаштыкка жөндөмдүү чөйрөлөрдө (көптөгөн агымдуу колдонмолор, маалымат базалары) жалпы маалыматка параллелдүү жетүүнү башкаруунун ыкмалары:

Пессимисттик блоктоо:

Мындай ыкмада, маалыматтарга жетүүдө ыктымалдуу кагылышуулар деп эсептелет. Ресурска жетүүдөн мурун, агым же транзакция аны блоктойт (эксклюзивдүү же бөлүштүрүлгөн блоктоо). Башка агымдар, жетүүнү каалагандар, блок алынганга чейин күтүшөт.

  • Артыкчылыктары: Маалыматтын бүтүндүгүн камсыздайт, төмөн атаандаштыкта жөнөкөй ишке ашырылат.
  • Кемчиликтери: Deadlock (өчүрүү) болушу мүмкүн, жогорку атаандаштыкта өткөрүмдүүлүк төмөндөйт.
  • Мисалдар: Javaда synchronized ачкыч сөзү, маалымат базаларында сап же таблица деңгээлиндеги блоктоолор.
// Пессимисттик блоктоонун Javaда мисалы
public class Counter {
    private int count = 0;

    public synchronized void increment() {
        count++; // Объектке блок коюу, бир убакта бир гана агым бул ыкмасын ишке ашыра алат
    }

    public synchronized int getCount() {
        return count;
    }
}

Оптимисттик блоктоо:

Мындай ыкмада, маалыматтарга жетүүдө азыркы учурда кагылышуулар жакшы деп эсептелет. Маалыматка жетүү блоктоосуз жүргүзүлөт. Өзгөртүүлөрдү сактаардан мурун, башка агымдан алынган учурда, маалыматтар өзгөргөнбү, текшерилет. Эгер өзгөрсө, операция жокко чыгарылат жана көбүнчө кайра ишке ашырылат (retry).

  • Артыкчылыктары: Жогорку өткөрүмдүүлүк, deadlock көйгөйлөрү жок.
  • Кемчиликтери: Кагылышуулар болушу мүмкүн, кайра аракеттер талап кылынат, логика татаалданат. Узак мөөнөттүү операцияларга ылайыктуу эмес.
  • Мисалдар: Compare-And-Swap (CAS) операциялары, версиялоо (versioning) маалымат базаларында, мисалы, версия же убакыт белгиси колдонуу.
// 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 маселеси Мүмкүн, болушу мүмкүн Мүмкүн эмес (конкуренттик жетүүнүн көз карашы менен)