Sobes.tech
Junior

Dasturlashda parallelizm nima?

sobes.tech AI

AIdan javob

Dasturlashda parallelizm bir yoki bir nechta vazifalarni bir vaqtning o'zida bajarilishi yoki bitta vaqtda bajarilayotgan ko'rinishidir, bu ilovalarining ishlashini va javob berish qobiliyatini oshiradi.

Bir nechta parallelizm turlari ajratiladi:

  • Ko'p protsessli (Multiprocessing): Bir nechta mustaqil jarayonlarni ishlatadi, har biri o'z manzil maydoniga ega. Bu CPython'dagi GIL (Global Interpreter Lock) cheklovini yengib o'tadi va CPU intensiv vazifalar uchun mos keladi.

    import multiprocessing
    import time
    
    def worker(num):
        """Bir ish"""
        time.sleep(1)
        print(f'Ishchi {num} tugadi')
    
    if __name__ == '__main__':
        processes = []
        for i in range(5):
            p = multiprocessing.Process(target=worker, args=(i,))
            processes.append(p)
            p.start()
    
        for p in processes:
            p.join()
        print("Barcha ishchilar tugadi")
    
  • Ko'p ipli (Multithreading): Bir jarayon ichida bir nechta iplarni ishlatadi, umumiy manzil maydonini bo'lishadi. CPython'da GIL sababli, iplar CPU-bound vazifalar uchun parallel ishlamaydi, ammo I/O-bound vazifalar uchun samarali.

    import threading
    import time
    
    def worker(num):
        """Bir ish"""
        time.sleep(1) # I/O operatsiyasini simulyatsiya qilish
        print(f'Ip {num} tugadi')
    
    threads = []
    for i in range(5):
        t = threading.Thread(target=worker, args=(i,))
        threads.append(t)
        t.start()
    
    for t in threads:
        t.join()
    print("Barcha iplar tugadi")
    
  • Asinxron dasturlash (Asyncio): Bir ip va voqealar tsikli (event loop) yordamida vazifalarni boshqaradi. Yuqori yuklangan I/O-bound ilovalar va veb-serverlar uchun mos. I/O kutayotgan paytda bajarilishni bloklamaydi.

    import asyncio
    import time
    
    async def worker(num):
        """Bir asinxron ish"""
        await asyncio.sleep(1) # Asinxron I/O kutish
        print(f'Asinxron ishchi {num} tugadi')
    
    async def main():
        tasks = []
        for i in range(5):
            task = asyncio.create_task(worker(i))
            tasks.append(task)
        await asyncio.gather(*tasks)
        print("Barcha asinxron ishlar tugadi")
    
    if __name__ == '__main__':
        asyncio.run(main())
    

Yondashuv tanlovi vazifaning tabiatiga bog'liq:

Yondashuv CPU-bound vazifalar I/O-bound vazifalar GIL Xotira foydalanishi
Ko'p protsessli A'lo Yaxshi Yengib o'tadi Katta (o'z jarayoni)
Ko'p ipli Yomon (GIL sababli) A'lo Bloklaydi Kichik (umumiy jarayon)
Asinxron Yomon A'lo Bloklamaydi Kichik (bir ip)

Parallelizm sinxronizatsiya va resurslarni ehtiyotkorlik bilan boshqarishni talab qiladi, shuningdek, shoshilinch holatlar va deadlocklarni oldini oladi.