Concurrency vs. Parallelism: İşlem Yönetimindeki Farklılıklar

demironW47
GoTurkiye
Published in
3 min readJul 23, 2023

Bilgisayarınız aynı anda kaç tane işi yapabilir, işlemler paralel mi yoksa eş zamanlı mı yürütülüyor?

Paralellik ve Eş zamanlılık kavramları uygulamaların performansı ve verimliğini artırmada önemli rol oynayan kavramlardır. Kelime anlamlarından ötürü birbirine benzer ve karıştırılabilir, bu yüzden bu kavramları açıklama ihtiyacı hissettim, iyi okumalar.

  • CPU, Core Ve Thread
  • Parallelism Nedir?
  • Concurrency Nedir?

CPU, Core Ve Thread

Eş zamanlılık ve paralellik konusuna girmeden önce işlemci üzerinde bir görevin nasıl yürütüldüğünü kabaca bilmekte fayda var.

CPU: Cental Process Unit (Merkezi İşlem Birimi) yada kısaca işlemci.

CORE: CPU içindeki fiziksel işlem birimidir. Günümüzde bir işlemci içerisinde birden fazla çekirdek barındırmaktadır.

THREAD: Bir işin eş zamanlı olarak işlenen her bir bölümüdür.

Bir çekirdek içerisinde bir yada daha fazla thread bulunabilir. Ancak bir çekirdek aynı anda yalnızca bir tane thread’i işleyebilir. Thread’ler işenirken zaman dilimine veya önem derecesine göre durdurulup başka bir thread’ın yürütülmesine devam edilir, bu oldukça kısa sürede geçekleştiği için bize sanki işlemlerimiz aynı anda gerçekleştiriliyormuş gibi gelir. Threadler (sadece thread değil process’ler de dahil) arasındaki bu geçiş işlemine context switch denir.

Parallelism Nedir?

Birden fazla işlemci yada görüntü işlemcisi gibi işlem yürütme yeteneğine sahip donanımın bulunduğu sistemlerde bir işlemin sonuçlarını daha hızlı elde etmek için kullanılan bir yöntemdir. Bir iş belirli parçalara bölünür ve sisteme dahil olan işlemcilere paylaştırılır, işlemciler aynı anda kendilerine düşen işlemleri yaparlar bu şekilde bir iş olması gerekenden daha az sürede tamamlanır. Hesaplaması çok uzun sürecek işlemlerde sıklıkla kullanılan bir yöntemdir. Coin mining yapan sistemlerin arkasında da bu yapı vardır, bir çok ekran kartı aynı işin parçalara ayrılmış her bir bölümünü tamamlamaya çalışır. Burada bilinmesi gereken bir başka nokta paralel programlamada aynı anda birden fazla iş yapılmasıdır.

context switch

Concurrency Nedir?

Eş zamanlı programlama bir iş bitmeden diğer bir işe geçilmesi durumudur. İşlemci üzerinde birden fazla çekirdek olduğundan ve her çekirdek bir işlem yürütebildiğinden elimizdeki işi concurrent bir yapıda çalıştırırsak response time’ı düşürebiliriz.

GO dilinde en basit şekliyle concurrency’i nasıl uygulayabileceğimize dair bir örnek var. Bu örnekte iki tane endpoint mevcut standard ve concurrent. standard endpointine istek atıldığında işlem bitinceye kadar kullanıcıya response dönülmez. Ancak concurrent endpointine istek atıldığında go komutu sayesinde işlem arkada çalışmaya devam eder, işlem arkada yürütülürken kullanıcıya response dönülür. Bunu loglamak için yazmak gerçek senaryolarda daha kısa response time üretmemize imkan sağlar. (her senaryo için geçerli değildir, bazı durumlarda işlemin bitmesini beklememiz gerekir.) İşlemin sonucunu response’a dahil etmeyeceksek bu şekilde kullanmak bize avantaj sağlayacaktır.

concurrent ve içerisinden çağırılan process fonksiyonlarının her birini ayrı bir task olarak düşünürsek bir task bitmeden diğer task’a geçiş durumu olduğundan ve process uzun süren bir işlem olduğundan process bitmeden kullanıcıya yanıt dönülmüş oluyor. Bütün bunlar doğrultusunda concurrency aynı anda birden fazla işle uğraşmak diyebiliriz.

Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once.

— Rob Pike

Umarım sizler için bilgilendirici bir içerik olmuştur, hepinize az bug’lı geliştirmeler dilerim.

--

--