"Eşzamanlı" ve "paralel" yürütme arasındaki fark?


107

Eşzamanlı ve paralel yürütme terimleri arasındaki fark nedir ? Ayrımı asla tam olarak anlayamadım.

Etiketi eşzamanlılığı aynı anda iki işlemi yürütmenin bir yolu olarak tanımlar, ancak paralelliğin tamamen aynı şey olduğunu düşündüm, yani: ayrı işlemciler üzerinde potansiyel olarak çalıştırılabilen ayrı iş parçacıkları veya işlemler.

Ayrıca, asenkron I / O gibi bir şey düşünürsek, eşzamanlılık veya paralellik ile mi uğraşıyoruz?


27
Özetle - eşzamanlı olarak: bir kerede gerçekleşen birçok farklı işlem. Paralel: Aynı işlem aynı anda gerçekleşen küçük parçalara bölündü.
Oded

3
@Oded, kelimelerin ne anlama geldiğini anlıyorum, ancak sonuçları anlamakta zorlanıyorum. Somut bir örneğiniz var mı?
blz

7
@Oded, size gerçekten katılmıyorum, tanımlarının hiçbir yerinde (genel veya programlamaya uygulanmış) "eşzamanlı" ve "paralel" kavramları işlemlerin sayısı veya "boyutu" hakkında bir şeyden bahsetmiyor.
Shivan Dragon

2
@ "Küçük parçalar" demeniz bitti.
Avner Shahar-Kashtan

2
@Oded: Evet, ama bu ShivanDragon ile aranızdaki yanlış anlamanın kökü gibi görünüyor.
Avner Shahar-Kashtan

Yanıtlar:


97

Eşzamanlılık ve paralellik iki ilişkili fakat farklı kavramlardır.

Eşzamanlılık, temel olarak, A ve B görevlerinin birbirinden bağımsız olması ve A'nın çalışmaya başlaması ve B'nin A bitmeden başlaması anlamına gelir.

Eşzamanlılığı başarmanın çeşitli yolları vardır. Bunlardan biri paralellik - aynı anda farklı görevlerde çalışan birden fazla CPU'ya sahip olmak. Ama bu tek yol değil. Bir diğeri, şunun gibi çalışan görev değiştirmedir : Görev A belirli bir noktaya kadar çalışır, sonra üzerinde çalışan CPU durur ve B görevine geçer, bir süre üzerinde çalışır ve sonra görev A'ya geri döner. zaman dilimleri yeterince küçüktür, kullanıcıya çok görevli bir işlemci tarafından seri olarak işlenmelerine rağmen, her iki şeyin de paralel olarak çalıştırıldığı görünebilir.


4
B Durumu, zaman uyumsuz IO'nun nasıl çalıştığı, hayır mı?
blz

6
@ blz: Bu doğru. Aynı zamanda önleyici çoklu görevler de işe yarıyor. Asıl fark, asenkron IO'da, programın zamanından vazgeçmeye ve CPU'ya başka bir şeyi işlemesini söylemeye karar vermesidir; oysa ki, eğer çalışan iş parçacığı işlemciyi yeterince uzun süre sonra gönüllü olarak bırakmazsa, preemptif çoklu görevde o.
Mason Wheeler

1
En iyi açıklama eller aşağı
Konrad

@MasonWheeler: Eğer sadece 1 CPU'muz varsa, sadece eşzamanlılık yapabiliriz, Paralellik yok. Sağ? Paralellik 1'den fazla CPU ile elde edilebilir. Sağ? Ve eğer doğruysa ve sadece 1 CPU'muz varsa, Java 8'den Streams herhangi bir işe yaramaz.
Anish Mittal

1
İlk birkaç noktada haklısın. Sonuncusu ise, Paralellik Akışlardan elde ettiğiniz tek fayda mı? Java geliştiricisi değilim, ancak benim izlenimim, Java Akışlarının LINQ ile kabaca eşdeğer olduğu ve bunun etkililikleri ve geliştirme kolaylığı açısından gerçek faydaları olduğu.
Mason Wheeler

37

İki kavram birbiriyle ilişkili ancak farklı.

Eşzamanlılık , aynı zaman çerçevesi içinde iki veya daha fazla hesaplamanın gerçekleştiği ve genellikle aralarında bir tür bağımlılık olduğu anlamına gelir.

Paralelcilik , iki veya daha fazla hesaplamanın aynı anda yapılması anlamına gelir.

Cesaretle söylemek gerekirse, eşzamanlılık bir sorunu (birlikte iki şeyin birlikte olması gerekir) tanımlarken, paralellik bir çözümü tarif eder (iki işlemi aynı anda iki şeyi yapmak için kullanılır).

Paralellik, eşzamanlılığı uygulamanın bir yoludur, ancak tek değildir. Bir başka popüler çözüm de birleştirilmiş işlem (aka coroutines): Her iki görevi de atomik adımlara bölmek ve ikisi arasında ileri geri geçiş yapmak.

Paralel olmayan eşzamanlılık için en iyi bilinen örnek, JavaScript'in nasıl çalıştığıdır: sadece bir iş parçacığı vardır ve zaman uyumsuz olan herhangi bir geri çağırma, önceki kod öbeğinin çalışmasını bitirene kadar beklemek zorunda kalır. Bunu bilmek önemlidir, çünkü yazdığınız herhangi bir işlevin atomik olduğunu garanti eder - geri arama yapılmazsa geri arama yapılamaz. Ancak, aynı zamanda "meşgul döngüler" in çalışmayacağı anlamına gelir - bir zaman aşımı ayarlayamazsınız ve sonra ateşlenene kadar döngü yapamazsınız, çünkü döngü zaman aşımı geri çağırma işleminin yürütülmesini önler.


8
Bunu söylüyorsun Concurrency means that two or more calculations happen within the same time frame, and there is usually some sort of dependency between them.Ama yazan cevabı yazan kullanıcı diyor Concurrency means, essentially, that task A and task B both need to happen independently of each other. Peki sonuç nedir?
nbro

JavaScript modelinin neden eşzamanlı olduğunu açıklayabilir misiniz? Eşzamanlılık tanımınıza göre, aynı zaman çerçevesi içinde iki veya daha fazla hesaplama yapılmalıdır. Ancak JavaScript'te hesaplamalar tek bir sıra kullanılarak sırayla sıralanır.
damluar

4
"Aynı zaman çerçevesi içinde", "eşzamanlı olarak" demek zorunda değilim, sadece meydana geldikleri toplam zaman dilimlerini de kapsıyor. Bu paralel olarak başarılabilir (örneğin, her biri görevlerden birini gerçekleştiren iki işlemci çekirdeği), ancak yürütmeyi tamamen serileştirerek de gerçekleştirilebilir (önce görev 1'i yapın, sonucu hatırlayın, sonra görev 2'yi yapın, sonra her ikisini de raporlayın) veya topakları hem keserek hem de birleştirerek doğrayarak. Sonuncusu JS'nin yaptığıdır.
tdammers

9

Bu cevabın mevcut cevaplardan daha doğru olduğuna ve onları düzenlemenin özünü değiştireceğine inanıyorum. Başkalarının doğruluğunu onaylamak için çeşitli kaynaklara veya wikipedia sayfalarına bağlantı vermeye çalıştım.


Eşzamanlılık: Program, algoritma ya da sorun birimleri sağlayan bir sistemin özelliği sonucunu etkilemeden-of-düzene üzerinden veya kısmi amacıyla yürütülecek 1 2 .

Bunun basit bir örneği ardışık eklemelerdir:

0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45

Eklemenin değişme özelliği nedeniyle, bunların sırası doğruluğu etkilemeden yeniden düzenlenebilir; aşağıdaki düzenleme aynı cevaba yol açacaktır:

(1 + 9) + (2 + 8) + (3 + 7) + (4 + 6) + 5 + 0 = 45

Burada sayıları 10'a çıkaran çiftler halinde gruplandırdım, bu da kafamdaki doğru cevaba ulaşmamı kolaylaştırdı.

Paralel Hesaplama: hesaplama bir tür olan bir çok hesaplamalar veya işlemlerin yürütülmesi eş zamanlı olarak gerçekleştirilir 3 , 4 . Böylece paralel hesaplama, programın, algoritmanın veya problemin aynı anda birden fazla ünitesini yürütmek için eşzamanlılık özelliğini kullanır.

Ardışık eklemeler örneği ile devam edersek, toplamın farklı bölümlerini paralel olarak uygulayabiliriz:

Execution unit 1:  0 + 1 + 2 + 3 + 4 = 10
Execution unit 2:  5 + 6 + 7 + 8 + 9 = 35

Sonra sonunda her bir işçinin elde edeceği sonuçları toplarız 10 + 35 = 45.

Yine, bu paralellik ancak ardışık eklemelerin eşzamanlılık özelliğine sahip olması nedeniyle mümkün olmuştur.

Eşzamanlılık olsa da, sadece paralellikten daha fazla yararlanılabilir. Tek çekirdekli bir sisteme ön hazırlık yaptırmayı düşünün : bir süre zarfında, sistem herhangi bir bitirme olmadan birden fazla işlemde ilerleme sağlayabilir. Aslında, asenkron G / Ç örneğiniz, paralellik gerektirmeyen ortak bir eşzamanlılık örneğidir.


karışıklık

Yukarıdakiler nispeten basittir. İnsanların kafasının karışdığından şüpheleniyorum, çünkü sözlük tanımları yukarıda belirtilenlerle eşleşmiyor olabilir:

  • Eşzamanlı: eşzamanlı olarak ya da eşzamanlı olarak ortaya çıkan ya da yan yana 5 .
  • Eşzamanlılık: aynı anda gerçekleşen veya aynı anda gerçekleşen iki veya daha fazla olayın veya durumun gerçeği Google’da arama yapmaktan sonra: "define: concurrency" .

Sözlük "eşzamanlılığı" oluşun bir gerçeği olarak tanımlar, oysaki bilgisayardaki yerel sözlük tanımı bir programın, özelliğin veya sistemin gizli bir özelliğidir. İlişkili olmasına rağmen bu şeyler aynı değildir.


Kişisel Öneriler

Eşzamanlı yürütme sağlandığında veya beklendiğinde "paralel" terimini kullanmanızı ve eşzamanlı çalıştırmanın uygulanıp uygulanmadığını belirsiz veya ilgisiz olduğunda "eşzamanlı" terimini kullanmanızı öneririm.

Bu nedenle, bir jet motorunun paralel olarak çoklu çekirdeklerde simüle edilmesini tarif ederim.

Makefiles'i bir eşzamanlılık örneği olarak tarif ederdim. Makefiles, her hedefin bağımlılıklarını belirtir. Hedefler diğer hedeflere bağlı olduğunda bu kısmi bir sipariş yaratır. İlişkiler ve tarifler kapsamlı ve doğru bir şekilde tanımlandığında, bu eşzamanlılık özelliğini oluşturur: belirli görevlerin sırasını sonucu etkilemeden yeniden düzenleyebilmek için kısmi bir düzen vardır. Yine, aynı anda birden fazla kural oluşturmak için bu eşzamanlılık artırılabilir, ancak eşzamanlılık, paralelliğin çalışıp çalışılmadığı Makefile'nin bir özelliğidir.


6

Eşzamanlı yürütme, genelleştirilmiş paralel yürütme biçimidir. Örneğin, paralel programa eşzamanlı da denebilir, ancak bunun tersi doğru değildir.

  1. Tek işlemcide eşzamanlı çalıştırma mümkündür (zamanlayıcı tarafından yönetilen çoklu iş parçacıkları)
  2. Tek işlemcide paralel işlem mümkün değil, birden fazla işlemcide mümkün. (İşlemci başına bir işlem)

Ayrıntılar için bu araştırma makalesini okuyun . Eşzamanlı Programlama Kavramları


1
"Tek işlemcide ancak birden fazla işlemcide paralel yürütme mümkün değildir" - elbette, bir işlemcide paralel yürütme yollarının olduğu durumlar dışında, örneğin, Eğitim Düzeyi Paralelliği (aka "süperskalar" mimarileri, örneğin Intel işlemcilerinden yararlanan sistemler) Pentium, ARM Cortex ve diğer birçok high-end işlemci) ve veri paralel mimarisi (ör. MMX / SSE / etc) olarak da bilinen Tek Yönlü Çoklu Veri. Dataflow işlemciler gibi egzotik düzenlemelerden bahsetmiyorum bile.
Jules,

3

Paralel işleme, eşzamanlı işlemenin bir alt kümesidir.

Eşzamanlı işlem, eşzamansız olarak gerçekleşen iki görevi açıklar; bu, görevlerin yürütüldüğü sıranın önceden belirlenmemiş olduğu anlamına gelir. İki iş parçacığı aynı anda çalıştırılabilir talimatları araya sokarak aynı işlemci çekirdeğinde çalışabilir. Örneğin, iş parçacığı 1 10ms, iş parçacığı 2 10ms vb. Çalışır.

Paralel işleme, birden fazla komut kümesinin aynı anda yürütüldüğü bir eşzamanlı işlem türüdür. Bu, dağıtılmış bilgisayardaki gibi ortak bir problem üzerinde çalışan çoklu sistemler veya aynı sistemdeki çoklu çekirdekler olabilir.


0

tdammer'ın ifadesi yaklaşıyor, geri kalan her şey mesele dışında. Diyor:

"Cesaretle koymak, eşzamanlılık bir sorunu (birlikte iki şeyin birlikte olması gerekir) tanımlarken, paralellik bir çözümü anlatıyor (iki işlemciyi aynı anda iki şeyi yürütmek için kullanılıyor"

Sadece kelimeleri analiz edelim.

Şu anda gerçekleşen mevcut demektir, şu anda mevcut, gerçek. Con, karşı, karşı, aynı hizada değil demektir.

Paralel, birbirinin yolunda olmadan, aynı yönde geçiş yapmadan anlamına gelir.

Dolayısıyla, eşzamanlılık aynı kaynak için rekabet anlamına gelir. Paralellik yok. Paralel işlemler aynı kaynağı kullanıyor olabilir, ancak sorun olarak kabul edilmez, sorun değildir. Eşzamanlılık ile ele alınması gereken bir konudur.


"Şu anda gerçekleşen mevcut, gerçek, şu anda geçerli olan anlamına gelir. - kaynak belirtilmeli. Bu ifadelerin her ikisinden de kesinlikle şüpheliyim. "Şimdiki" burada İngilizce anlamı ifade edebilirken, "eşzamanlı" kelimesinde kullanılan anlam bu değildir
Hulk

1
Latince'den eşzamanlı çevirinin "birlikte koşmak" olduğunu düşünüyorum. Öneki 'con' sıklıkla anlamına birlikte (birlikte nefes almak) sonucu (sonuçları birlikte veya aşağıdaki) (birbirine yakın) sonuçlandırmak vb şeyler ters anlamlara sahip olabilir dilin sinir bozucu bir yönüdür komplo olduğu gibi, yaptırım sevdiğim örnektir .

@ no comprende Bu durumda (bir arada) birlikte koşmak anlamı daha uygun görünmektedir. Yanlısı bir prova olmadığı için ... Hollandaca'da eşzamanlı bir isim anlamı rakip. Courant sık görülür, etrafınızda dolanır. Aynı zamanda gazetedir. Şimdi aktif olan bir şey. "Rekening courant" çalışan bir hesaptır. Eşzamanlılık con (!) Flict anlamına gelir hissediyorum. Aynı kaynak için bir mücadele. Aynı alanda koşuyorum. Belki Hollandaca anlamı yüzünden (rakip).
Martin Maat

Dijkstra ne derdi acaba?

-1

Açıkçası, terimler farklı kültürlerde farklı şekilde kullanılıyor.

Benim anlayışım şudur:

Paralellik, işlemeyi hızlandırmanın bir yoludur. Tek bir çekirdekte, birden fazla çekirdekte veya hatta GPU'da matris çarpımı yapsanız da, sonuç aynıdır (veya programınız bozulur). Bazı programlara yeni işlevler eklemez, sadece hız sağlar.

Eşzamanlılık sırayla yapamayacağınız şeyler hakkında olsa da. Örneğin, bir sonraki isteği beklerken, aynı anda 3 istemciye 3 farklı web sayfası sunma. (Bunu, yaşlı günlerde olduğu gibi, bir araya getirme yoluyla bir dereceye kadar benzetebilseniz de.) Eşzamanlı programların davranışının özgün olmadığını unutmayın. Örneğin, hangi 3 müşteriden hangisinin ilk önce tam olarak hizmet edeceği açık değildir. Tamamen bazı testler yapabilir ve isteğin biteceği sırayla ilgili her seferinde farklı bir sonuç alabilirsiniz. Çalışma zamanı sistemi a) tüm müşterilere makul bir süre içinde hizmet verilecek ve b) garanti etmelidir.

Genellikle, paralel bir hesaplamanın iş atı, paralellikten haberdar değil ya da umursamıyor. Eşzamanlı görevler çoğu zaman açıkça sıralar arası engelleme, senkronizasyon ve kilitleme mekanizmaları gibi süreçler arası veya diziler arası iletişimi kullanır.


-1

Benim düşünceme göre, bir uygulama programlama açısından bu iki kavram arasında bir fark yoktur ve iki kelimeye sahip olmak karışıklık uğruna kafa karıştırıcıdır. Bence thread interleaving, çok çekirdekli işlemlerin mümkün olmadığı günlerde çok çekirdekli işlemeyi simüle etmek üzere yapıldığını düşünüyorum. Bu modası geçmiş zihniyet için neden bir sözümüz var?

Mason Wheeler ve Penguin aynı cevabı vermişlerdir. Görev değiştirme ve veya çok çekirdekli bir Çekirdek eşzamanlı, kesinlikle çok çekirdekli = paralel.

Kanımca bu iki terimin bir araya getirilmesi gerektiği ve "eşzamanlı" demekten kaçınmak için çaba sarf ettiğim. İşletim sistemi programlama düzeyinde farkın önemli olduğunu düşünüyorum, ancak uygulama programcısının bakış açısından çok da önemli değil. MapReduce, Spark, MPI, cuda, openCL ve okuyuculu c ++ yazdım ve işin bir araya getirilmiş iplerle mi yoksa birden çok çekirdekli mi çalıştığını asla düşünmemeliydim.

Örneğin, çok iş parçacıklı c ++ yazdığımda bazen kaç tane çekirdek alacağımı bilmiyorum, ancak burada açıklanan şekilde kaç tane çekirdek aldığınızı talep etmenin yolları var. Https://stackoverflow.com/questions/2166425/ multicore işlemcili bir işlemci nasıl kullanılır ? Kıvılcım halinde sadece harita yapıyorum ve işlemleri azaltıyorum ve jvm'nin bunları donanım seviyesinde nasıl kullandığı hakkında hiçbir fikrim yok. GPU’larda sanırımHer iş parçacığı kendi basit işlemcisine atanmış, ancak her zaman bir sorun çıkabileceği yerde iş parçacığımı eşitlerim. MPI ile, makineler arasındaki iletişim açıkça belirtilir, ancak birden fazla makinede çalışan işlevleri tek bir çekirdeğe yerleştirebilir ve sonuçları uygun bir tek dişli işlevle birleştirebiliriz. Ve ya MPI kullanıyorsak, her biri birden fazla okuyuculu bir dizi tek çekirdekli makineyi koordine etmek için? Ne fark eder? Hiçbiri derdim. Hepsine "paralel" deyin ve bununla bitirin.


2
Bu ayrım bugün hala geçerlidir. Yalnızca donanımınızın sahip olduğu CPU çekirdeği sayısına kadar paralelliğe sahip olabilirsiniz, ancak birçok programda aynı anda gerçekleşen yüzlerce eşzamanlı hesaplama vardır, donanımın sahip olduğu çekirdek sayısından çok daha fazla. Bu ayrımın anlaşılmaması, programcıların paralelleştirilmiş programlarının neden tek dişli sürümlerinden (veya az sayıdaki konu başlıkları) daha yavaş çalıştığını anlamada başarısız olmasına neden olabilir.
Yalan Ryan,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.