Multiprocessing ve Multihreading

Arkadaşlar multiprocessing ve multihthreading arasındaki farklar nelerdir ? Hangisi ne için kullanılır ?

Multiprocessing: Programın birden fazla işlemci çekirdeği üzerinde paralel bir şekilde çalışması.
Multithreading: Programın aynı işlemci çekirdeği üzerinde paralel bir şekilde çalışması.
Buradaki “paralel”, iki işlemin de aynı anda yapılması anlamına geliyor.

Multiprocessing

İşlemcilerin belli bir zamanda yapabilecekleri işlem sayısı sınırlıdır. Yani yazdığımız bir kodu ne kadar hızlı çalıştırabileceği belirlidir. Buradaki process kelimesi işlem anlamına gelir.
Multiprocessing de birden fazla işlem yapmak demek. Ancak bu işlemler tek bir çekirdekte yapılmak yerine farklı çekirdekler üzerine paylaştırılır. Bu ne işe yarar? İşlemcinin bir çekirdeği tek başına kodumuzu 10 saniyede yerine getiriyorsa iki çekirdek ile bu 6 saniye sürebilir. Yani iş yükü işlemcimizin farklı çekirdekleri üzerine dağıtılır.
Şuana kadar çok iyi, programımızı parçalara bölerek ve bu parçaları da farklı çekirdeklere vererek daha hızlı çalışmasını sağlayabiliyoruz. Ancak burada kötü bir durum var, o da bu çekirdeklerin birbirlerininde çalışan programların değişkenlerine doğrudan erişememeleri. Bu yüzden çoğunlukla hesaplanması zaman alacak bir işlem varsa bunu hızlandırmak için multiprocessing kullanılır ve bunların dönüş değeri alınır.

Multithreading

Kelime anlamı olarak çoklu kullanım gibi bir anlama geliyor. Yani aynı çekirdeği farklı işlemler için kullanıyoruz. Burada bir performans kazancımız olmuyor, yani işlemlerimiz daha hızlı yapılmıyor. Burada yapılan şey iki farklı işlemin aynı anda yapılması. Ayrıca burada değişkenler ortak kullanılıyor, oysa ki multiprocessing’de bunu yapamıyorduk. Tabii burada da GIL gibi problemler var. Bu da aslında thread’lerimizin paralel değil, sıralı çalıştığı anlamına geliyor. Ancak sonuç olarak multithreading’de kullandığımız bütün thread’ların aynı değişkenlere erişimi var.

Ne zaman hangisini kullanmalıyım?

Eğer yapılması zaman alacak bir işlem yapıyorsak ve bu işlemi hızlandırmak istiyorsak multiprocessing.
Eğer iki veya daha fazla işlemin aynı anda çalışmasını istiyorsak ve de bu işlemlerin aynı değişkenlere erişmesini istiyorsak multithreading.

Not: Multiprocessing ile de aynı değişkenleri kullanmanın yolları vardır. Bunların biri C diline ait değişkenlerini kullanmak. Bunlar da sadece int, string veya bunların listeleri gibi basit değişkenler. Eğer Python’a ait sınıflardan ve değişkenlerden yararlanmak istiyorsak bunun da yolları var. Ancak burada yapılan şey aslında başka bir thread başlatıp localhost’u kullanarak
internet üzerinden programlarımızın değişkenleri paylaşmasını sağlamak. Ki multiprocessing’de amacımızın performansı arttırmak olduğu düşünüldüğünde bu işlemin de verimi azalttığını gözardı etmemek lazım.

Teşekkürler ( 20 karakter )

1 Like

Calisan kodun akisina “thread” diyoruz. Ayni anda birden fazla is yapmak, birden fazla kod (veya ayni kodu birden fazla kere) calistirmak icin birden fazla thread’e ihtiyacimiz var. Bu thread’ler ayni process’teyse “multithreading [ile paralellik]”, farkli process’lerdelerse “multiprocessing [ile paralellik]” diyoruz.

Process paylasmayi ev paylasmak gibi dusunebilirsin: Bazi seyleri paylasip bazi isleri beraber yapmak kolaylasiyor, ama guvenlik ve problem izolasyonu zorlasiyor.

2 Likes