Sobes.tech
Middle

Bloklama vəziyyəti nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Lock contention (kilid mübahisəsi) baş verdikdə, bir neçə iş parçacığı və ya proses eyni vaxtda ümumi resursa (məsələn, dəyişən, fayl və ya kilid) eksklüziv giriş əldə etməyə çalışır və bu, kilid mexanizmi ilə qorunur. Bu, onların bəzilərinin dayandırılmasına və resursun azad olunmasını gözləməsinə səbəb olur.

Əsas səbəblər:

  • Çox iş parçacığı/multiprocessing.
  • Paylaşılan dəyişdirilə bilən resurslar.
  • Kilidlərin optimal olmayan istifadəsi (çox uzun və ya granüllü kilidlər).

Nəticələr:

  • Gözləmə səbəbi ilə performansın azalması.
  • Kilidlərin idarə olunması xərclərinin artması.
  • Yanlış istifadə zamanı mümkün deadlocklar (ölümbənzər bloklamalar).

Minimallaşdırma üsulları:

  • Resursun bloklanma müddətini azaltmaq.
  • Daha az granüllü kilidlərdən istifadə etmək (yalnız lazım olan hissəni kilidləmək).
  • Əgər mümkünsə, atomik əməliyyatlar tətbiq etmək.
  • Bloklamayan məlumat strukturlarından istifadə etmək.
  • Arxitektura imkan verirsə, horizontal miqyasda artırmaq.

Python kod nümunəsi, kilid üçün rəqabəti göstərir:

import threading
import time

lock = threading.Lock()
counter = 0

def increment():
    global counter
    # Kilidi əldə etmək
    lock.acquire()
    try:
        # İşin simulyasiyası
        time.sleep(0.01)
        counter += 1
    finally:
        # Kilidi azad etmək
        lock.release()

threads = []
for _ in range(10):
    t = threading.Thread(target=increment)  # İş parçacqları yaratmaq
    threads.append(t)
    t.start()  # İş parçacqlarını başlatmaq

for t in threads:
    t.join()  # Bütün iş parçacqlarının tamamlanmasını gözləmək

print(f"Nəticə: {counter}")

Burada lock.acquire()lock.release() counter-ə girişə nəzarət edir. Bloklama olmadan (və ya rəqabətdə), nəticə 10-dan aşağı ola bilər, çünki yarış şəraiti (race condition) baş verə bilər.