Python (FastAPI & Django) İleri Seviye Çekirdek & Performans

Python GIL (Global Interpreter Lock) & Asyncio vs Multiprocessing

CPython'un tek seferde sadece tek bir thread'in bytecode çalıştırmasına izin veren koruma kilidi.

5 Yaşındaki Çocuğa Anlatır Gibi (Analoji)

Tek bir mikrofon olan bir toplantı odasıdır. Masada 8 kişi (8 Thread) otursa da mikrofona aynı anda sadece 1 kişi konuşabilir. Gerçek paralellik için yan odaya ayrı insan grubu koymak gerekir (Multiprocessing).

Teknik & Mimari Tanım

CPython bellek yönetiminde Reference Counting kullanır. Race condition'ları engellemek için GIL vardır. Bu yüzden standart multithreading CPU-yoğun işlerde çok çekirdekten (Multi-Core) yararlanamaz. I/O işlerinde Asyncio veya Threading etkiliyken, CPU-yoğun işlerde Multiprocessing şarttır.

Mülakatta Ne Demelisin? (Kurtarıcı Altın Cevap)

“GIL, CPython'un bellek güvenliği için koyduğu bir kilittir. Ağ ve veritabanı beklemesi gibi I/O işlemlerinde GIL serbest bırakıldığı için Asyncio mükemmel çalışır. Ancak görüntü işleme veya makine öğrenimi gibi CPU işlemlerinde GIL nedeniyle multiprocessing (ProcessPoolExecutor) kullanılmalıdır.”

Python (FastAPI & Django) Örnek Uygulaması
import asyncio

async def fetch_data(api_id: int):
    # I/O beklemesinde event loop diğer göreve geçer:
    await asyncio.sleep(1)
    return f"Sonuç {api_id}"

async def main():
    results = await asyncio.gather(*(fetch_data(i) for i in range(100)))
    print("100 istek 1 saniyede bitti!")
Mülakat Tuzağı & Adayların En Sık Yaptığı Hata:

FastAPI async endpoint'i içinde bloklayıcı time.sleep() veya requests.get() çağırarak tüm asenkron Event Loop'u kilitlemek (bunun yerine httpx ve asyncio.sleep kullanılmalıdır).