Ana içeriğe geç

Eşzamanlılık

İngilizcesi
Concurrency
Okunuşu
kınkörınsi

Günlük kullanımda iki ad da yaygın.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/concurrency

Kısaca

Eşzamanlılık, bir programın birden çok görevde örtüşen zaman dilimlerinde ilerleyebilme yeteneğidir; örneğin birçok kullanıcıya aynı anda hizmet vermek gibi.

Programlamada eşzamanlılık (concurrency) nedir?

Eşzamanlılık, bir programı birden çok görevle aynı anda başa çıkabilecek biçimde yapılandırmak, birini tamamen bitirip ardından diğerine başlamak yerine ihtiyaç oldukça aralarında geçiş yapmak demektir. Binlerce kullanıcıya hizmet veren bir web sunucusu, siz kaydırırken dosya indiren bir tarayıcı ve arka planda görüntü yükleyen bir telefon uygulaması eşzamanlılığa dayanır. Özellikle görevler bir ağ yanıtı ya da disk okuması gibi bir şey için beklerken zaman harcadığında yararlıdır.

Eşzamanlılığa ulaşmanın birkaç yolu vardır. İş parçacıkları (thread) işletim sisteminin tek bir program içinde ayrı talimat dizilerini çalıştırmasını sağlar; JavaScript ve Node.js'in kullandığı olay döngüleri (event loop) ise tek iş parçacığında aynı anda tek bir kod parçasını çalıştırır, ancak bir görev girdi/çıktı için beklediğinde diğer işe geçer. Diller ayrıca async/await, Go'daki goroutine'ler ve Erlang ile Elixir'deki aktörler (actor) gibi daha üst seviyeli araçlar da sunar.

Tek bir aşçının birkaç yemek pişirmesi eşzamanlılık için klasik bir benzetmedir: makarna kaynarken aşçı sebze doğrar, sonra sosu karıştırır ve her yemeği ilerletmeye devam eder. Paralellik ise her biri aynı anda bir yemek pişiren birkaç aşçıya sahip olmak gibidir, tıpkı birden çok CPU çekirdeğinin kodu aynı anda çalıştırması gibi. Eşzamanlılık aynı anda birçok şeyle uğraşmakla, paralellik ise aynı anda birçok şey yapmakla ilgilidir; bir program paralel olmadan da eşzamanlı olabilir.

Eşzamanlılık kendine özgü bir hata sınıfı getirir. Yarış durumu (race condition), sonucun görevlerin öngörülemez zamanlamasına bağlı olduğu durumdur; örneğin iki iş parçacığının aynı banka bakiyesini aynı anda güncellemesi ve güncellemelerden birinin kaybolması gibi. Geliştiriciler bunları kilitler (lock), atomik işlemler, mesaj geçişi ya da değişmez veriyle önler; ancak dikkatsiz kilitleme, iki görevin birbirini sonsuza dek beklediği bir kilitlenmeye (deadlock) yol açabilir.

Bir bakışta

Her biri hesaplayan, ağı bekleyen ve yeniden hesaplayan iki görev: art arda çalışınca 440 zaman birimi sürer; tek çekirdekte eşzamanlı çalışınca biri beklerken diğeri hesaplar ve ikisi de 280'de biter.SıraylaAbekliyorABbekliyorBbitti · 440Eşzamanlı, tek çekirdekAbekliyorABbekliyorBbitti · 280zaman0100200300400
Eşzamanlılık, bir görev beklerken boş durmamaktır. Görevleri birden fazla çekirdekte gerçekten aynı anda çalıştırmak ise paralelliktir; eşzamanlılık bunu gerektirmez.

Önemli noktalar

  • Eşzamanlılık, bir programın birden çok görevde örtüşen zaman dilimlerinde ilerlemesini sağlar.
  • İş parçacıkları, olay döngüleri, async/await, goroutine'ler ya da aktörlerle sağlanabilir.
  • Paralellik, görevlerin birden çok çekirdekte tam anlamıyla aynı anda çalışması demektir; eşzamanlılık bunu gerektirmez.
  • Paylaşılan değişebilir veriye erişim koordine edilmezse yarış durumları ve kilitlenmeler oluşabilir.

Örnek

JavaScript'te eşzamanlı ve ardışık isteklerjavascript
// Concurrent: both requests are in flight at the same time
async function loadDashboard() {
  const [user, orders] = await Promise.all([
    fetch("/api/user").then((res) => res.json()),
    fetch("/api/orders").then((res) => res.json()),
  ]);
  return { user, orders };
}

// Sequential: the second request waits for the first to finish
async function loadDashboardSlowly() {
  const user = await fetch("/api/user").then((res) => res.json());
  const orders = await fetch("/api/orders").then((res) => res.json());
  return { user, orders };
}

Sık sorulan sorular

Eşzamanlılık ile paralellik arasındaki fark nedir?

Eşzamanlılık, ömürleri örtüşen birden çok görevi, herhangi bir anda yalnızca biri çalışıyor olsa bile yönetmekle ilgilidir. Paralellik ise birden çok görevi birden çok CPU çekirdeğinde tam anlamıyla aynı anda yürütmektir; eşzamanlı işi çalıştırmanın bir yoludur, ancak tek yolu değildir.

Yarış durumu (race condition) nedir?

Yarış durumu, sonucun eşzamanlı görevlerin çalışma zamanlamasına ya da sırasına bağlı olduğu bir hatadır. Örneğin iki görev bir sayacı okur, bir ekler ve aynı anda geri yazarsa artışlardan biri kaybolabilir.

JavaScript eşzamanlı mıdır?

Evet. JavaScript kodunuzu tek bir iş parçacığında çalıştırır, ancak olay döngüsü, beklerken başka kod çalıştırarak zamanlayıcılar ve ağ istekleri gibi birçok işlemi eşzamanlı olarak yönetmesini sağlar. Gerçek paralellik için tarayıcılar Web Worker'ları, Node.js ise worker thread'leri sunar.

Sık karşılaştırılanlar

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar