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


1075

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

Örnekler takdir edilmektedir.


41
kısa cevap: Eşzamanlılık, tek bir kasiyerden sipariş veren iki satır müşteridir (satırlar sırayla sipariş verir); Paralellik, iki kasiyerden sipariş veren iki müşteri grubudur (her bir hat kendi kasiyerini alır).
chharvey

@chharvey: Bunun cevap olması gerektiğini düşünüyorum. Kısa (iki kısa metin satırı, "kısa cevap" kelimesinden ayrılırsanız), anında anlaşılabilir. Güzel yapılmış!
Mike Maxwell

Yanıtlar:


1269

Eşzamanlılık , çakışan zaman aralıklarında iki veya daha fazla görevin başlayabildiği, çalışabildiği ve tamamlanabildiği zamandır. Bu, her ikisinin de aynı anda çalışacağı anlamına gelmez. Örneğin, tek çekirdekli bir makinede çoklu görev .

Paralellik , görevlerin tam anlamıyla aynı zamanda, örneğin çok çekirdekli bir işlemcide çalıştığı zamandır.


Sun'ın Çok İş parçacıklı Programlama Kılavuzu'ndan Alıntı :

  • Eşzamanlılık: En az iki iş parçacığı ilerlerken var olan bir koşul. Bir sanal paralellik biçimi olarak zaman dilimlemeyi içerebilen daha genelleştirilmiş bir paralellik biçimi.

  • Paralellik: En az iki iş parçacığı aynı anda yürütüldüğünde ortaya çıkan bir durumdur.


169
Bu yanıtı seviyorum, ama belki de daha ileri gidip eşzamanlılığı bir programın veya sistemin bir özelliği olarak (ve aynı anda birden fazla görevi yürütmenin çalışma zamanı davranışı olarak paralellik) karakterize ederim.
Adrian Mouat

24
Adrian Mouat'ın yorumunu çok beğendim. Ayrıca bu mükemmel açıklamaya bakın: haskell.org/haskellwiki/Parallelism_vs._Concurrency
jberryman

9
@Raj: Tek çekirdekli işlemcilerle doğru, paralellik (çoklu kullanım anlamında) mümkün değildir.
RichieHindle

5
Sıralı ve Paralel her ikisi de bir numaralandırmada değer olsaydı, o numaralandırmanın adı ne olurdu?
toddmo

11
Bu amaçla, Sun'un alıntısı şu şekilde yeniden düzenlenebilir: - Eşzamanlılık: Belirli bir süre boyunca iki iş parçacığı ilerleme gösterdiğinde var olan bir koşul - Paralellik: Belirli bir zaman noktasında iki iş parçacığı olduğunda ortaya çıkan bir durum aynı anda idam
Phillip

494

Karışıklık Neden Var

Bu iki kelimenin sözlük anlamları neredeyse aynı olduğu için karışıklık var:

  • Eşzamanlı : aynı anda mevcut, oluyor veya yapıldı (dictionary.com)
  • Paralel : çok benzer ve aynı anda oluyor (merriam webster).

Yine de bilgisayar bilimi ve programlamasında kullanım şekilleri oldukça farklıdır. İşte benim yorumum:

  • Eşzamanlılık : Kesinti
  • Paralellik : Bağımsızlık

Peki yukarıdaki tanımlarla ne demek istiyorum?

Gerçek bir dünya benzetmesi ile açıklığa kavuşacağım. Diyelim ki bir günde 2 çok önemli görev yapmanız gerekiyor:

  1. Pasaport temin et
  2. Bir sunum yapın

Şimdi sorun, görev-1'in pasaportunuzu almak için sıra halinde 4 saat beklemenizi sağlayan son derece bürokratik bir devlet dairesine gitmenizi gerektirmesidir. Bu arada, görev-2 ofisiniz için gereklidir ve bu kritik bir görevdir. Her ikisi de belirli bir günde bitirilmelidir.

Durum 1: Sıralı Yürütme

Normalde, pasaport ofisine 2 saat sürecek, sırada 4 saat bekleyecek, görevi halledecek, iki saat geri gidecek, eve gidecek, 5 saat daha uyanık kalacak ve sunum yapacaksınız.

Durum 2: Eşzamanlı Yürütme

Ama sen akıllısın. İleriyi planlıyorsun. Yanınızda bir dizüstü bilgisayar taşıyorsunuz ve sırada beklerken sunumunuz üzerinde çalışmaya başlıyorsunuz. Bu şekilde, eve döndüğünüzde, 5 yerine 1 saat daha çalışmanız gerekir.

Bu durumda, her iki görev de sadece parça halinde yapılır. Sırada beklerken pasaport görevine ara verdiniz ve sunum üzerinde çalıştınız. Numaranız arandığında, sunum görevine ara verdiniz ve pasaport görevine geçtiniz. Zaman tasarrufu, her iki görevin de kesintiye uğraması nedeniyle mümkün olmuştur.

Eşzamanlılık IMO bölgesi "izolasyon" özelliği olarak anlaşılabilir ASİT . Alt işlemler her bir araya eklenmiş şekilde gerçekleştirilebiliyorsa ve iki sonuç sırayla yapılmış gibi sonuçla aynı ise, iki veritabanı işlemi izole edilmiş sayılır. Unutmayın, hem pasaport hem de sunum görevleri için tek icracı sizsiniz .

Durum 3: Paralel Yürütme

Şimdi, çok akıllı bir arkadaş olduğunuz için, açıkça bir yükselişsiniz ve bir asistanınız var. Bu yüzden, pasaport görevine başlamadan önce, onu arayın ve sunumun ilk taslağını hazırlamasını söyleyin. Tüm gününüzü geçiriyorsunuz ve pasaport görevini bitiriyorsunuz, geri dönüp postalarınızı görüyorsunuz ve sunum taslağını buluyorsunuz. Oldukça sağlam bir iş çıkardı ve 2 saat içinde bazı düzenlemelerle, sonuçlandırıyorsunuz.

Artık asistanınız sizin kadar zeki olduğu için, sizden sürekli olarak açıklama istemesine gerek kalmadan bağımsız olarak çalışabildi . Böylece, görevlerin bağımsızlığı nedeniyle, aynı anda iki farklı icracı tarafından gerçekleştirildi .

Hala benimle? Peki...

Durum 4: Eşzamanlı fakat Paralel Değil

Sırada beklemek zorunda olduğunuz pasaport görevinizi hatırlıyor musunuz? O olduğu için sizin pasaport, asistanınız sizin için doğrultusunda sabırsızlanıyorum. Bu nedenle, pasaport görevinin kesintiye uğraması vardır (hatta beklerken durdurabilir ve numaranız çağrıldığında daha sonra devam edebilirsiniz), ancak bağımsızlık yoktur (asistanınız yerine bekleyemez).

Durum 5: Paralel fakat Eşzamanlı Değil

Hükümet dairesinin binalara girmek için bir güvenlik kontrolü olduğunu varsayalım. Burada, tüm elektronik cihazları kaldırmalı ve memurlara göndermelisiniz ve bunlar sadece görevinizi tamamladıktan sonra cihazlarınızı iade etmelidir.

Bu durumda, pasaport görevi ne bağımsızlaştırılabilir ne de kesilebilir . Hatta bekliyor olsanız bile, başka bir şey üzerinde çalışamazsınız çünkü gerekli ekipmana sahip değilsiniz.

Benzer şekilde, sunumun doğası gereği çok matematiksel olduğunu ve en az 5 saat boyunca% 100 konsantrasyona ihtiyacınız olduğunu varsayalım. Dizüstü bilgisayarınız yanınızda olsa bile pasaport görevi için sırada beklerken bunu yapamazsınız.

Bu durumda, sunum görevi bağımsızdır (siz veya asistanınız 5 saat odaklanmış çaba gösterebilir), ancak kesilemez .

Durum 6: Eşzamanlı ve Paralel Yürütme

Şimdi, asistanınızı sunuma atamanın yanı sıra, pasaport görevine yanınızda bir dizüstü bilgisayar taşıdığınızı varsayalım. Sırada beklerken, asistanınızın paylaşılan bir destede ilk 10 slaydı oluşturduğunu görürsünüz. Çalışmaları hakkında bazı düzeltmelerle yorumlar gönderirsiniz. Daha sonra, taslağı sonlandırmak için 2 saat yerine eve döndüğünüzde, sadece 15 dakikaya ihtiyacınız var.

Sunum görevinin bağımsızlığı (ya sizden biri yapabilirsiniz) ve kesilebilirliği (durdurabilir ve daha sonra devam ettirebilirsiniz) olduğu için bu mümkün oldu. Böylece her iki görevi aynı anda ve sunum görevini paralel olarak yürüttünüz.

Diyelim ki aşırı bürokratik olmanın yanı sıra devlet dairesi de yolsuzluk içinde. Böylece, kimliğinizi gösterebilir, girebilir, numaranızın aranması için sırada beklemeye başlayabilir, bir gardiyana ve bir başkasını sıradaki pozisyonda tutacak, gizlice girebilir, numaranız aranmadan geri gelebilir ve beklemeye devam edebilirsiniz. kendin.

Bu durumda, hem pasaport hem de sunum görevlerini aynı anda ve paralel olarak gerçekleştirebilirsiniz. Gizlice girebilirsiniz ve pozisyonunuz asistanınız tarafından tutulur. Her ikiniz de sunum vb. Üzerinde çalışabilirsiniz.


Geri Bilgisayar Bilimi

Bilgisayar dünyasında, bu vakaların her birine özgü örnek senaryolar:

  • Durum 1: Kesme işlemi.
  • Durum 2: Yalnızca bir işlemci olduğunda, ancak tüm yürütme görevlerinin G / Ç nedeniyle bekleme süreleri vardır.
  • Durum 3: Genellikle harita küçültme veya hadoop kümeleri hakkında konuşurken görülür.
  • Durum 4: Durum 4'ün nadir olduğunu düşünüyorum. Bir görevin eşzamanlı olması, ancak paralel olmaması nadirdir. Ama olabilir . Örneğin, görevinizin yalnızca işlemci-1 üzerinden erişilebilen özel bir hesaplama çipine erişim gerektirdiğini varsayalım. Bu nedenle, işlemci-2 ücretsiz olsa ve işlemci-1 başka bir görev gerçekleştiriyor olsa bile, özel hesaplama görevi işlemci-2'de devam edemez.
  • Durum 5: ayrıca nadirdir, ancak Durum 4 kadar nadir değildir. Eşzamanlı olmayan bir kod, muteksler tarafından korunan kritik bir bölge olabilir. Bir kez başlatıldığında, tamamlanması gerekir . Ancak, iki farklı kritik bölge, iki farklı işlemci üzerinde aynı anda ilerleyebilir.
  • Durum 6: IMO, paralel veya eşzamanlı programlama hakkında çoğu tartışma temel olarak Durum 6'dan bahsediyor. Bu, hem paralel hem de eşzamanlı yürütmelerin bir karışımı ve eşleşmesidir.

Eşzamanlılık ve Git

Rob Pike'ın eşzamanlılığın daha iyi olduğunu söylediğini görüyorsanız, bunun nedenini anlamalısınız. Dosya okuma, ağ indirme gibi bazı harici işlemleri beklediğiniz çoklu bekleme sürelerinin olduğu gerçekten uzun bir göreviniz var. Konuşmasında söylediği tek şey, “beklerken yararlı bir şeyler yapabilmek için bu uzun ardışık görevi parçalamak”. Bu yüzden çeşitli gophers'lı farklı organizasyonlardan bahsediyor.

Artık Go'nun gücü, bu kırılmayı goanahtar kelime ve kanallarla gerçekten kolaylaştırmaktan geliyor . Ayrıca, bu goroutinleri programlamak için çalışma zamanında mükemmel bir destek vardır.

Ama esasen, eşzamanlılık paralellikten daha mı iyidir?

Elmalar portakaldan daha mı iyidir?


Durum 5 için teşekkürler. Sık sık paralel örtük eşzamanlılık anlamına gelir.
hqt

2
Node.js olay döngüsü, durum 4 için iyi bir örnektir. B işlemcisinin serbest kaynakları olmasına rağmen, X isteği, Y işlenmesi ile meşgul olan A işlemcisi tarafından işlenmelidir. Y için setTimeout çağrılırsa, X işlenebilir, zaman aşımı sonrasında Y de işlenecektir.
Lucas Janon

Kabul edilen cevaba konulan "eşzamanlılık" kelimesinin iki tanımını belirtmek gerekir ve bu oldukça farklıdır . Birincisi, üst üste binen zaman periyotlarında (yani paralellik def ile eşzamanlılık anlamına gelir) birkaç görevi yürütme konseptini ifade eder, ikincisi diğerini çalıştırmak için bir görevi kesintiye uğratma konseptini ifade eder.
Mergasov

Yukarıdaki yoruma benzer - multithread python 4. vakanın bir örneğidir. Bu vakanın nadir olduğunu düşünmüyorum. Herhangi bir global tercüman kilidi durum 4 ile sonuçlanır (eğer eşzamanlılığa izin veriyorsa).
chub500

245

Rob Pike'ın konuşmasını seviyorum: Eşzamanlılık Paralellik değil (daha iyi!) (Slaytlar) (konuşma)

Rob genellikle Go hakkında konuşuyor ve genellikle Concurrency vs Parallelism sorununu görsel ve sezgisel bir açıklamada ele alıyor! İşte kısa bir özet:

Görev: Eski dil kılavuzlarını bir yığın yakalım! Her seferinde bir tane!

Görev

Eşzamanlılık: Görevin aynı anda birçok ayrışması var! Bir örnek:

Gophers

Paralellik: Aynı anda çalışan en az 2 gopher varsa veya çalışmıyorsa, önceki yapılandırma paralel olarak gerçekleşir.



15
Üzgünüm, "daha iyi" bit için onu aşağı çekmek zorunda kaldı. Doğru cevap farklı olmasıdır. Eşzamanlılık sorunun bir parçasıdır. Paralellik çözümün bir parçasıdır.
pyon

@ EduardoLeón Açıkçası konuşmanın adını kontrol etmediniz. Eşzamanlılık bir sorun değil, sadece bir sorun / görev üzerinde düşünmenin bir yoludur.
asfer

5
@asfer Eşzamanlılık, sorunun yapısının bir parçasıdır. Bu arada, "eşzamanlılık" (sorun) ile "eşzamanlılık kontrolü" (genellikle paralellikle birlikte kullanılan bir çözüm) ile karıştırmayın.
pyon

1
İzledim ve dürüst olmak gerekirse beğenmedim. Çok daha basit bir şekilde açıklanması gereken bir şeye gereksiz komplikasyonlar ve nerdyness ekler (hokkabazların cevabını buradan kontrol edin).
jj_

146

Başkalarının söylediklerine eklemek için:

Eşzamanlılık, bir hokkabazın birçok topu oynatması gibidir. Nasıl göründüğünden bağımsız olarak, hokkabaz her seferinde sadece bir topu yakalar / fırlatır. Paralellik, aynı anda birden fazla hokkabaz topu döndürüyor.


2
Seçici olacağım, ancak bir çift topla hokkabazlık yapıyorsanız, aynı anda iki topunuz olabilir (nasıl hokkabazlık yaptığınıza bağlı olarak).
thebugfinder

52
@thebugfinder, Thomas örneğinde hataya yer kalmayacağından emin olmak için. Eşzamanlılık sadece 1 eliyle hokkabazlık yapan biri gibidir. Nasıl göründüğüne bakılmaksızın, kişi aynı anda en fazla bir topu tutuyor. Paralellik, hokkabazın her iki eli kullandığı zamandır.
bigtunacan

aslında "topları çifti sayısı" ile söylemek istediğim "topları sayısı" oldu
thebugfinder

1
Çok akıllıca bir cevap. Kesinlikle bu kişinin fikrini görebiliyorum, ama her seferinde bir eylem dikkate alındığında ve üzerinde anlaşmaya varıldıysa bu cevabı çok beğeniyorum.
BK

2
Bence "Paralellik her top için bir kişi alıyor" ile daha iyidir. Top sayısı artarsa ​​(web isteklerini hayal edin), bu insanlar hokkabazlık yapmaya başlayabilir ve yürütmeyi eşzamanlı ve paralel hale getirebilir. Ayrıca birileri hokkabazlar örnek ile reaktör desen açıklamak isterdim isterim.
jj_

120

İki iş parçacığı olan bir programınız olduğunu varsayalım. Program iki şekilde çalışabilir:

Concurrency                 Concurrency + parallelism
(Single-Core CPU)           (Multi-Core CPU)
 ___                         ___ ___
|th1|                       |th1|th2|
|   |                       |   |___|
|___|___                    |   |___
    |th2|                   |___|th2|
 ___|___|                    ___|___|
|th1|                       |th1|
|___|___                    |   |___
    |th2|                   |   |th2|

Her iki durumda da, sadece birden fazla iş parçacığımız olduğu gerçeğiyle aynı anda çalışıyoruz.

Bu programı tek bir CPU çekirdeği olan bir bilgisayarda çalıştırırsak, işletim sistemi iki iş parçacığı arasında geçiş yaparak her seferinde bir iş parçacığının çalışmasına izin verir.

Bu programı çok çekirdekli CPU'lu bir bilgisayarda çalıştırırsak, iki iş parçacığını aynı anda yan yana paralel olarak çalıştırabilirdik .


4
İplik bloklarını beğendim. Basit ama mükemmel! Harika bir cevap için teşekkürler.
bozzmob

53

Eşzamanlılık: İki veya daha fazla sorun tek bir işlemci tarafından çözülürse. alternatif metin

Paralellik: Bir sorun birden fazla işlemci tarafından çözülürse.

alternatif metin


55
Buna katılmıyorum - eşzamanlı olarak tasarlanmış bir program paralel çalıştırılabilir veya çalıştırılmayabilir; eşzamanlılık bir programın özniteliğidir, yürütüldüğünde paralellik oluşabilir.
Adrian Mouat

36

İlginç ve anlaşılması kolay bir örnekle açıklamaya çalışacağım. :)

Bir kuruluşun, 10 oyuncunun ( eşit satranç oynama becerisine sahip ) profesyonel bir şampiyon satranç oyuncusuna meydan okuyacağı bir satranç turnuvası düzenlediğini varsayalım . Ve satranç 1: 1 oyun olduğundan, organizatörler tüm oyunları olabildiğince çabuk bitirebilmeleri için 10 oyunu zamanında verimli bir şekilde yürütmek zorundadır.

İnşallah aşağıdaki senaryoları kolayca bu 10 oyunu yürütmek için birden fazla yol tarif edecek:

1) SERİ - profesyonelin her bir kişi ile birer birer oynadığını söyleyelim, yani bir kişi ile oyunu başlatır ve bitirir ve daha sonra bir sonraki kişi ile bir sonraki oyuna başlar vb. Başka bir deyişle, oyunları sırayla yapmaya karar verdiler. Bir oyunun tamamlanması 10 dakika sürerse, 10 oyun 100 dakika sürecektir, ayrıca bir oyundan diğerine geçişin 6 saniye sürdüğünü ve 10 oyun için 54 saniye (yaklaşık 1 dakika) olacağını varsayın.

böylece tüm etkinlik yaklaşık 101 dakika içinde tamamlanacak ( EN KÖTÜ YAKLAŞIM )

2) CONCURRENT - profesyonelin sırayla oynadığını ve bir sonraki oyuncuya geçtiğini söyleyelim, böylece 10 oyuncunun hepsi aynı anda oynuyor ancak profesyonel oyuncu aynı anda iki kişiyle değil, sırayla oynuyor ve bir sonraki kişiye geçiyor. Şimdi profesyonel oyuncunun sırasını oynamak için 6 saniye sürdüğünü ve profesyonel oyuncunun s / b iki oyuncunun geçiş süresinin 6 sn olduğunu varsayalım, böylece ilk oyuncuya geri dönmek için toplam geçiş süresi 1dk (10x6sn) olacaktır. Bu nedenle, olayın başladığı ilk kişiye geri döndüğünde, 2 dakika geçti (10xtime_per_turn_by_champion + 10xtransition_time = 2mins)

Tüm oyuncuların SERIAL etkinliğinden no. Oyun bitmeden turların sayısı 600 / (45 + 6) = 11 tur (yaklaşık)

Böylece tüm etkinlik 11xtime_per_turn_by_player _ & _ champion + 11xtransition_time_across_10_players = 11x51 + 11x60sec = 561 + 660 = 1221sn = 20.35mins (yaklaşık)

İYİLEŞTİRMEYE 101 dakikadan 20.35 dakikaya ( İYİ YAKLAŞIM ) BAKIN

3) PARALLEL - organizatörlerin fazladan para aldığını ve böylece iki profesyonel şampiyon oyuncuyu (her ikisi de eşit derecede yetenekli) davet etmeye karar verdiğini ve her biri 5 kişilik iki gruba aynı 10 oyuncu (rakip) setini böldüğünü ve iki şampiyona verdiğini söyleyelim. her birini gruplandırın. Şimdi olay bu iki sette paralel ilerliyor, yani kendi gruplarındaki iki profesyonel oyuncuya karşı en az iki oyuncu (her grupta bir oyuncu) oynuyor.

Ancak grup içinde profesyonel oyuncu her seferinde bir oyuncu alır (yani sırayla), böylece herhangi bir hesaplama yapmadan, tüm etkinliğin yaklaşık 101/2 = 50.5 dakika içinde tamamlanacağını kolayca çıkarabilirsiniz

İYİLEŞTİRMEYE 101 dakikadan 50.5 dakikaya kadar ( İYİ YAKLAŞIM )

4) CONCURRENT + PARALLEL - Yukarıdaki senaryoda, iki şampiyon oyuncunun kendi gruplarındaki 5 oyuncu ile aynı anda oynayacağını (2. noktayı okuyacağını) söyleyelim, böylece gruplar arasındaki oyunlar paralel çalışıyor ancak grup içinde aynı anda çalışıyorlar.

Böylece bir gruptaki oyunlar yaklaşık 11xtime_per_turn_by_player _ & _ şampiyonu + 11xtransition_time_across_5_players = 11x51 + 11x30 = 600 + 330 = 930sn = 15.5 dakika (yaklaşık)

Böylece tüm olay (bu tür iki paralel koşu grubunu içeren) yaklaşık 15,5 dakika içinde tamamlanacak

İYİLEŞTİRMEYİ 101 dakikadan 15,5 dakikaya kadar görün ( EN İYİ YAKLAŞIM )

NOT: yukarıdaki senaryoda 10 oyuncuyu 10 benzer iş ve iki profesyonel oyuncuyu iki CPU çekirdeği ile değiştirirseniz, yine aşağıdaki sıralama geçerli kalacaktır:

SERİ> PARALEL> BİRLEŞTİR> BİRLEŞTİR + PARALEL

(NOT: bu sipariş, işlerin birbirine bağımlılığı, iletişimin s / b işleri ve geçiş yükü s / b işlerine bağlı olması nedeniyle diğer senaryolar için değişebilir)


2
Harika bir açıklama. Bir ek var. 2. durum için eşzamanlı model (profesyonel bir oyuncu s / b oyuncuları hareket ettirdiğinde) ancak oyuncu 45 saniye içinde sırasını yaparsa iyileşme elde eder. Başka bir deyişle, tüm süreçte G / Ç'yi bekletmeliyiz. Normal bir oyuncu 45 saniyeden daha kısa sürede dönebiliyorsa (5 veya 10 saniye olabilir) iyileştirme daha az olacaktır. Dolayısıyla, işimizde I / O bekleme süresi yoksa, eşzamanlılık kabaca seri bir yürütme ile aynı olacaktır.
Psylone

33

Basit örnek:

Eşzamanlı: "Bir ATM makinesine erişen iki kuyruk"

Paralel: "İki kuyruk ve iki ATM makinesi"


Ve çoklu kullanım? Sadece çoklu kullanım teriminin yukarıdaki senaryoya nasıl uyduğunu düşünmek. Bu durumda, Concurrent == Multithreading, her kuyruktan birinde olduğu gibi her an ATM'ye mi gider?
KhoPhi

31

Bir video eğitimi izleyerek yeni bir programlama dili öğrendiğinizi düşünün. Videoyu duraklatmanız, kodda söylenenleri uygulamanız ve ardından izlemeye devam etmeniz gerekir. Bu eşzamanlılık.

Artık profesyonel bir programcısınız. Ve kodlama sırasında sakin müzik dinlemekten zevk alırsınız. Bu Paralellik.

Andrew Gerrand söylediği gibi GoLang Blog

Eşzamanlılık, aynı anda birçok şeyle uğraşmakla ilgilidir. Paralellik, aynı anda birçok şey yapmakla ilgilidir.

Zevk almak.


29

Farklı sorunları çözüyorlar. Eşzamanlılık, yetersiz CPU kaynaklarına ve birçok göreve sahip olma sorununu çözer. Böylece, kıt kaynakta zaman paylaşmak için kodlar aracılığıyla iş parçacıkları veya bağımsız yürütme yolları oluşturursunuz. Yakın zamana kadar, CPU kullanılabilirliği nedeniyle eşzamanlılık tartışmaya egemen oldu.

Paralellik, yeterli görevleri ve uygun görevleri (doğru şekilde ayrılabilen görevleri) bulma ve bunları bol miktarda CPU kaynağı üzerinden dağıtma sorununu çözer. Paralellik her zaman elbette olmuştur, ancak çok çekirdekli işlemciler çok ucuz olduğu için ön plana çıkmaktadır.


28

uyumluluk: kaynakları paylaşma potansiyeli olan çoklu yürütme akışları

Örn: bir G / Ç bağlantı noktası için yarışan iki iş parçacığı.

paralelizm: bir problemi birçok benzer parçaya bölmek.

Örn: dosyanın her yarısında iki işlem çalıştırarak büyük bir dosyayı ayrıştırma.


21

Eşzamanlı programlama yürütmesinin 2 tipi vardır: paralel olmayan eşzamanlı programlama ve paralel eşzamanlı programlama (paralellik olarak da bilinir).

Temel fark, insan gözü için, paralel olmayan eşzamanlılıktaki ipliklerin aynı anda çalıştığı görülüyor, ancak gerçekte öyle değiller. Paralel olmayan eşzamanlı ipliklerde, işlemciyi zaman dilimleme yoluyla kullanmak için hızla geçiş yapar ve sırayla. Paralellikte birden fazla işlemci mevcut olduğu için, aynı anda farklı işlemciler üzerinde birden çok iş parçacığı çalışabilir. resim açıklamasını buraya girin

Referans: Programlama Dillerinde Eşzamanlılığa Giriş


8
bin kelimeye
bedel

21

Paralellik bir multiple cores per CPUveya üzerindeki işlemlerin eşzamanlı yürütülmesidir multiple CPUs (on a single motherboard).

Eşzamanlılık , CPU'nun zamanını (zaman dilimi) bölen programlama algoritmaları kullanılarak Paralelliğe ulaşıldığındadır . İşlemler serpiştirilir .single core/CPU

Birimler:

  • Tek bir CPU'da 1 veya daha fazla çekirdek (hemen hemen tüm modern işlemciler)
  • Anakartta 1 veya daha fazla CPU (eski okul sunucularını düşünün)
  • 1 uygulama 1 programdır (Chrome tarayıcıyı düşünün)
  • 1 programda 1 veya daha fazla işlem olabilir (her bir Chrome tarayıcı sekmesinin bir işlem olduğunu düşünün)
  • 1 işlem 1 programdan 1 veya daha fazla iş parçacığı içerebilir (Chrome sekmesini 1 iş parçacığında Youtube videosu oynatır, yorumlar bölümünde başka bir iş parçacığı, kullanıcılar giriş bilgileri için başka bir iş parçacığı)
  • Böylece, 1 program 1 veya daha fazla yürütme iş parçacığına sahip olabilir
  • 1 işlem thread(s)+allocated memory resources by OS (yığın, yazmaçlar, yığın, sınıf belleği)

2
Bence bu Bilgisayar Bilimi dünyasında mükemmel bir cevap.
sofs1

1
Bu cevap kabul edilmiş olmalı, üst ve alt felsefe değil
Eugen Sunic

10

Eşzamanlılık => Paylaşılan kaynaklarla çakışan zaman aralıklarında birden çok görev gerçekleştirildiğinde (kaynak kullanımını potansiyel olarak en üst düzeye çıkarır).

Parallel =>, tek bir görev aynı anda gerçekleştirilebilen birden çok basit bağımsız alt göreve ayrıldığında.


Çakışan işleme görünümü vermek için çoklu görevlerin (zaman dilimleri) tek çekirdekli bir işlemci sistemini nasıl tarif edersiniz? Eşzamanlılık çakışan zaman periyotlarında yürütme olarak tanımlandığında, bu işlemeyi içerir. Eşzamanlılık tanımınız altında onu hariç tutan eşzamanlı yürütme tanımladınız.
acarlon

9

Bunu, sunucunun kuyruktaki yalnızca ilk işi sunabileceği hizmet kuyrukları olarak düşünün.

1 sunucu, 1 iş kuyruğu (5 iş ile) -> eşzamanlılık yok, paralellik yok (Yalnızca bir işin tamamlanması için hizmet veriliyor, sıradaki bir sonraki iş, hizmet verilen iş bitene kadar beklemek zorunda ve başka bir sunucu yok servis yapın)

1 sunucu, 2 veya daha fazla farklı kuyruk (kuyruk başına 5 iş ile) -> eşzamanlılık (sunucu, kuyruklardaki tüm 1. işlerle eşit veya ağırlıklı olarak zaman paylaştığından), her andan beri hala paralellik yoktur. hizmet.

2 veya daha fazla sunucu, bir Kuyruk -> paralellik (aynı anda 2 iş yapılır) ancak eşzamanlılık yok (sunucu zaman paylaşmıyor, 3. iş sunuculardan biri tamamlanana kadar beklemek zorunda.)

2 veya daha fazla sunucu, 2 veya daha fazla farklı kuyruk -> eşzamanlılık ve paralellik

Başka bir deyişle, eşzamanlılık bir işi tamamlamak için zaman paylaşıyor, işini tamamlamak aynı zaman alabilir ancak en azından erken başlar. Önemli olan, işlerin serpiştirmeye izin veren daha küçük işlere dilimlenebilmesidir.

Paralellik, paralel çalışan daha fazla CPU, sunucu, kişi vb. İle elde edilir.

Kaynaklar paylaşılırsa, saf paralellik sağlanamaz, ancak bu noktada eşzamanlılığın en iyi pratik kullanımına sahip olacağı ve bu kaynağa ihtiyaç duymayan başka bir işi alacağını unutmayın.


7

Buradaki bazı popüler cevaplarla biraz çelişen bir cevap sunacağım. Bence eşzamanlılık, paralellik içeren genel bir terimdir. Eşzamanlılık , farklı görevlerin veya iş birimlerinin zamanla çakıştığı her durum için geçerlidir. Paralellik daha spesifik olarak, farklı fiziksel birimlerin aynı fiziksel zamanda değerlendirildiği / yürütüldüğü durumlar için geçerlidir. Paralelliğin gerekçesi, birden fazla fiziksel hesaplama kaynağından yararlanabilecek yazılımı hızlandırmaktır. Eşzamanlılık altında uyan bir diğer önemli kavram etkileşimdir. Etkileşim , görevlerin çakışması dış dünyadan gözlemlendiğinde geçerlidir. Etkileşimin gerekçesi, kullanıcılar, ağ eşleri, donanım çevre birimleri, vb. Gibi gerçek dünya varlıklarına yanıt veren yazılımlar yapmaktır.

Paralellik ve etkileşim, eşzamanlılığın neredeyse tamamen bağımsız bir boyutudur. Belirli bir proje için geliştiriciler ikisini de, ikisini de dikkate alabilir. En azından, iplik olan iğrençliğin her ikisini de yapmak için oldukça uygun bir ilkel sağladığı için, sınırlandırılmaya eğilimlidirler.

Paralellik hakkında biraz daha ayrıntı :

Paralellik çok küçük ölçeklerde (örneğin işlemcilerde komut düzeyinde paralellik), orta ölçeklerde (örneğin çok çekirdekli işlemciler) ve büyük ölçeklerde (örneğin yüksek performanslı hesaplama kümeleri) bulunur. Çok çekirdekli işlemcilerin büyümesi nedeniyle yazılım geliştiricileri üzerinde daha fazla iş parçacığı düzeyinde paralellik ortaya çıkarma baskısı artmıştır. Paralellik, bağımlılık kavramıyla yakından bağlantılıdır . Bağımlılıklar, paralelliğin ne ölçüde gerçekleştirilebileceğini sınırlar; biri diğerine bağlıysa iki görev paralel olarak yürütülemez (Spekülasyon yoksayılıyor).

Programcıların paralellik ifade etmek için kullandıkları birçok desen ve çerçeve vardır: boru hatları, görev havuzları, veri yapıları üzerinde toplu işlemler ("paralel diziler").

Etkileşim hakkında biraz daha ayrıntı :

Etkileşim yapmanın en temel ve yaygın yolu olaylardır (yani bir olay döngüsü ve işleyiciler / geri çağrılar). Basit görevler için olaylar harika. Olaylarla daha karmaşık görevler yapmaya çalışmak yığın yırtılmasına (aka geri arama cehennemi; aka kontrol tersine çevirme) girer. Etkinliklerden bıktığınızda, jeneratörler, koroutinler (Async / Await) veya kooperatif iş parçacıkları gibi daha egzotik şeyleri deneyebilirsiniz.

Güvenilir yazılım sevgisi için, eğer istediğiniz şey etkileşim ise, lütfen konuları kullanmayın.

Curmudgeonliness

Rob Pike'ın "eşzamanlılık paralellik değil; daha iyi" sloganından hoşlanmıyorum. Eşzamanlılık paralellikten ne daha iyi ne de daha kötüdür. Eşzamanlılık, paralellik ile daha iyi / daha kötü bir şekilde karşılaştırılamayan etkileşimi içerir. "Kontrol akışı verilerden daha iyidir" demek gibidir.


6

Elektronikte seri ve paralel , devrenin gerçek davranışını belirleyen bir tür statik topolojiyi temsil eder. Eşzamanlılık olmadığında paralellik belirleyicidir .

Dinamik, zamanla ilgili fenomeni tanımlamak için sıralı ve eşzamanlı terimleri kullanıyoruz . Örneğin, belirli bir görev dizisi (örn. Bir tarif) aracılığıyla belirli bir sonuç elde edilebilir . Birisiyle konuşurken, bir dizi kelime üretiyoruz. Bununla birlikte, gerçekte, birçok başka süreç aynı anda gerçekleşir ve bu nedenle, belirli bir eylemin gerçek sonucuna katılır . Bir çok insan aynı anda konuşuyorsa, eşzamanlı görüşmeler dizimize müdahale edebilir, ancak bu müdahalenin sonuçları önceden bilinmemektedir. Eşzamanlılık belirsizliği beraberinde getirir .

Seri / paralel ve ardışık / eşzamanlı karakterizasyon diktir. Bunun bir örneği dijital iletişimdir. Bir seri adaptörde , bir dijital mesaj geçici olarak (yani sıralı olarak ) aynı iletişim hattı (örn. Bir tel) boyunca dağıtılır. Bir de , paralel adaptör , bu paralel iletişim hatları (örn. Bir çok telli) da bölünür, ve daha sonra, alıcı ucunda yeniden.

9 çocuklu bir oyun görelim. Onları bir zincir olarak atarsak, ilk başta bir mesaj verir ve sonunda alırsak, seri bir iletişimimiz olur. Daha fazla kelime, bir dizi iletişim birliğini içeren mesajı oluşturur.

I like ice-cream so much. > X > X > X > X > X > X > X > X > X > ....

Bu, seri bir altyapı üzerinde çoğaltılan sıralı bir işlemdir .

Şimdi, çocukları 3'lü gruplar halinde bölelim. İfadeyi üç parçaya böleriz, birincisini solumuzdaki çizginin çocuğuna, ikincisini merkez çizgisinin çocuğuna veririz.

I like ice-cream so much. > I like    > X > X > X > .... > ....
                          > ice-cream > X > X > X > ....
                          > so much   > X > X > X > ....

Bu, paralel bir altyapı üzerinde çoğaltılmış sıralı bir süreçtir (yine de kısmen serileştirilmiştir).

Her iki durumda da, çocuklar arasında mükemmel bir iletişim olduğunu varsayarsak, sonuç önceden belirlenir .

İlk çocukla sizinle aynı anda konuşan başka kişiler varsa, eşzamanlı süreçlerimiz olacaktır . Altyapı tarafından hangi sürecin dikkate alınacağını bilmiyoruz, bu yüzden nihai sonuç önceden belirlenmemiştir .


+1 İlginç. Bir tanımın hesaplanmasında, halihazırda kabul edilen cevaba göre, eşzamanlı olarak, aynı anda değil, çakışan zaman aralıklarında yürütme (paralel olacaktır) anlamına gelir. Elektronikte, aynı anda olan şeylerin görünümünü vermek için tasarlanmış, ancak çok hızlı bir şekilde geçiş yapan devreleri nasıl tarif edersiniz? Dondurma benzetmenize devam etmek için: Dondurmayı çok seviyorum> çocuk A1 Seviyorum> çocuk B1 dondurma> çocuk C1 çok> çocuk A2 Seviyorum> çocuk B2 dondurma <çocuk C2 çok ...
acarlon

Bunu ilk defa burada gördüm: s1l3n0.blogspot.com/2013/04/… .
FrankHB

Evet, cevabımı kişisel blog-notlarımdan birinde biraz rafine ettim / uzattım. ;)
s1l3n0

5

Eşzamanlılık, paralelliğin genelleşmiş biçimidir. Örneğin, paralel program eşzamanlı olarak da adlandırılabilir, ancak tersi doğru değildir.

  1. Tek işlemcide eşzamanlı yürütme mümkündür (zamanlayıcı veya iş parçacığı havuzu tarafından yönetilen birden çok iş parçacığı)

  2. Tek işlemcide değil, birden çok işlemcide paralel yürütme mümkün değildir. (İşlemci başına bir işlem)

  3. Dağıtılmış bilgi işlem de ilgili bir konudur ve aynı zamanda eşzamanlı bilgi işlem olarak da adlandırılabilir, ancak paralellik gibi tersi de doğru değildir.

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


5

Bu grafiksel gösterimi başka bir cevaptan gerçekten beğendim - sanırım soruyu yukarıdaki cevapların çoğundan çok daha iyi cevaplıyor

Paralellik ve Eşzamanlılık İki iş parçacığı paralel olarak çalıştığında, her ikisi de aynı anda çalışır. Örneğin, A ve B olmak üzere iki iş parçacığımız varsa, paralel yürütmeleri şöyle görünür:

CPU 1: A ------------------------->

CPU 2: B ------------------------->

İki iş parçacığı aynı anda çalışırken, yürütme çakışır. Üst üste binme iki yoldan biriyle gerçekleşebilir: ya iş parçacıkları aynı anda yürütülür (yani yukarıdaki gibi paralel olarak) ya da yürütmeleri işlemciye araya eklenir, örneğin:

CPU 1: A -----------> B ----------> A -----------> B -------- ->

Yani, bizim amacımız için, paralellik özel bir eşzamanlılık durumu olarak düşünülebilir

Kaynak: Burada başka bir cevap

Umarım yardımcı olur.


4

Paul Butcher'ın bu soruya vermiş olduğu cevabı gerçekten seviyorum ( yedi haftada yedi eşzamanlılık modelinin yazarı ):

Sıklıkla karıştırılsalar da, paralellik ve eşzamanlılık farklı şeylerdir. Eşzamanlılık, sorunlu alanın bir özelliğidir; kodunuzun birden fazla eşzamanlı (veya eşzamanlı) olayı işlemesi gerekir . Paralellik, bunun aksine, çözüm etki alanının bir özelliğidir - sorunun farklı bölümlerini paralel olarak işleyerek programınızın daha hızlı çalışmasını istiyorsunuz . Bazı yaklaşımlar eşzamanlılık için, bazıları paralellik için ve bazıları da her ikisi için geçerlidir. Hangisiyle karşılaştığınızı anlayın ve iş için doğru aracı seçin.


3

Eşzamanlılık , eşzamanlı olarak ya da yürütülmeyen görevleri içerebilir (gerçekten ayrı işlemcilerde / çekirdeklerde çalıştırılabilirler, ancak "keneler" de de çalıştırılabilirler). Ne önemli olduğunu eşzamanlılık her zaman atıfta olan bir büyük görevin parçası yapıyor . Temelde bu bazı hesaplamaların bir parçası. Aynı anda neler yapabileceğiniz, neyi yapmamanız ve nasıl senkronize edeceğiniz konusunda akıllı olmalısınız.

Paralellik , bazı şeyleri aynı anda yaptığınız anlamına gelir. Bir sorunun çözülmesinin bir parçası olmaları gerekmez. İş parçacıklarınız, örneğin, her biri tek bir sorunu çözebilir. Tabii ki senkronizasyon işleri de farklı perspektiften uygulanır.


3

"Eşzamanlılık" devam eden birden çok şey olduğunda .

"Paralellik", eşzamanlı şeylerin aynı anda ilerlediği zamandır .


Paralelliksiz eşzamanlılık örnekleri:

  • Tek bir çekirdek üzerinde birden fazla iş parçacığı.
  • Bir Win32 ileti kuyruğundaki birden çok ileti.
  • SqlDataReaderBir MARS üzerinde çoklu s bağlantısında .
  • Bir tarayıcı sekmesinde birden fazla JavaScript vaadi .

Bununla birlikte, eşzamanlılık ve paralellik arasındaki farkın genellikle bir perspektif sorunu olduğuna dikkat edin. Yukarıdaki örnekler, kodunuzu yürütme (gözlemlenebilir etkileri) açısından paralel değildir. Ancak tek bir çekirdekte bile talimat düzeyinde paralellik vardır. CPU ile paralel şeyler yapan ve daha sonra CPU'yu kesintiye uğratan donanım parçaları vardır. GPU, pencere yordamı veya olay işleyicisi yürütülürken ekrana çiziliyor olabilir . DBMS, bir öncekinin sonuçlarını getirmeye devam ederken bir sonraki sorgu için B-Ağaçları arasında geçiş yapıyor olabilir. Tarayıcı, Promise.resolve()yürütülürken düzen veya ağ iletişimi yapıyor olabilir . Vesaire vesaire...

Al işte ozaman, buyur. Dünya her zamanki gibi dağınık;)


3

Bence ikisini anlamanın en basit ve zarif yolu bu. Eşzamanlılık, yürütmenin araya girmesine izin verir ve böylece yanılsama verebilir paralellik . Bu, örneğin Word'de bir belge yazarken yanınızda Youtube videonuzu çalıştırabileceği anlamına gelir. Eşzamanlı bir sistem olan temel işletim sistemi, bu görevlerin yürütülmelerini eklemesini sağlar. Bilgisayarlar talimatları çok hızlı yürüttüğü için, aynı anda iki şey yapıyormuş gibi görünür.

Böyle şeyler gerçekten ne zaman Paralellik olduğunu vardır paralel. Yukarıdaki örnekte, video işleme kodunun tek bir çekirdek üzerinde yürütüldüğünü ve Word uygulamasının başka bir çekirdek üzerinde çalıştığını görebilirsiniz. Bu, eşzamanlı bir programın paralel olabileceği anlamına gelir! Uygulamanızı iş parçacıkları ve işlemlerle yapılandırmak, programınızın temeldeki donanımdan yararlanmasını ve potansiyel olarak paralel olarak yapılmasını sağlar.

O zaman neden her şey paralel olmasın? Bunun bir nedeni, eşzamanlılığın programları yapılandırmanın bir yolu olması ve endişelerin ayrılmasını kolaylaştıracak bir tasarım kararı olmasıdır, oysa paralellik genellikle performans adına kullanılır. Bir diğeri, bazı şeylerin temelde tam olarak paralel olarak yapılamamasıdır. Bunun bir örneği, kuyruğun arkasına iki şey eklemek olabilir - ikisini aynı anda ekleyemezsiniz. Bir şey önce, diğeri arkasında olmalı, yoksa kuyruğu karıştırmalısınız. Her ne kadar bu tür bir yürütme serpiştirebilirsek (ve eşzamanlı bir kuyruk alırsak), buna paralel olamazsınız.

Bu yardımcı olur umarım!


3

Eşzamanlı programlama, örtüşüyor gibi görünen ve öncelikle belirleyici olmayan kontrol akışı nedeniyle ortaya çıkan karmaşıklıkla ilgilidir. Eşzamanlı programlarla ilişkili nicel maliyetler tipik olarak hem verim hem de gecikmedir. Eşzamanlı programlar genellikle IO'ya bağlıdır, ancak her zaman değil, örneğin eşzamanlı çöp toplayıcıları tamamen CPU'dur. Eşzamanlı bir programın pedagojik örneği bir web tarayıcıdır. Bu program, web sayfaları için istekleri başlatır ve indirmelerin sonuçları kullanıma sunuldukça, daha önce ziyaret edilmiş olan bir dizi sayfayı biriktirerek yanıtları aynı anda kabul eder. Kontrol akışı belirleyici değildir, çünkü programın her çalıştırılışında yanıtların aynı sırada alınması gerekmez. Bu özellik eşzamanlı programlarda hata ayıklamayı çok zorlaştırabilir. Bazı uygulamalar temelde eşzamanlıdır, örneğin web sunucuları istemci bağlantılarını aynı anda işlemelidir. Erlang, yüksek eşzamanlı programlama için belki de en umut verici gelecek dil.

Paralel programlama, iş hacmini iyileştirme hedefi için çakışan işlemler ile ilgilidir. Eşzamanlı programlamanın zorlukları, kontrol akışını deterministik hale getirerek önlenir. Genellikle, programlar paralel çalışan alt görev kümeleri oluşturur ve üst görev yalnızca her alt görev tamamlandığında devam eder. Bu, paralel programların hata ayıklamasını çok daha kolay hale getirir. Paralel programlamanın zor kısmı, ayrıntı düzeyi ve iletişim gibi konularda performans optimizasyonudur. İkincisi hala çok çekirdekli bağlamda bir sorundur, çünkü verilerin bir önbellekten diğerine aktarılmasıyla ilgili önemli bir maliyet vardır. Yoğun matris-matris çarpımı, paralel programlamanın pedagojik bir örneğidir ve Straasen 'kullanılarak verimli bir şekilde çözülebilir. s böl ve fethet algoritması ve alt problemlere paralel olarak saldırmak. Cilk, paylaşılan bellek bilgisayarlarında (çoklu çekirdekler dahil) yüksek performanslı paralel programlama için belki de en umut verici dildir.

Cevabımdan kopyalandı: https://stackoverflow.com/a/3982782


2

Paralellik: Birden fazla iş parçacığına sahip olmak, ihtiyaç duydukları veri ve kaynak açısından birbirinden bağımsız benzer görevleri yerine getirir. Örneğin: Google tarayıcısı binlerce iş parçacığı oluşturabilir ve her iş parçacığı bu görevi bağımsız olarak yapabilir.

Eşzamanlılık: Veri paylaştığınız zaman, iş parçacıkları arasında paylaşılan kaynak olduğunda eşzamanlılık ortaya çıkar. İşlemsel bir sistemde bu, Kilitler, semaforlar vb. Gibi bazı teknikleri kullanarak kodun kritik bölümünü senkronize etmeniz gerektiği anlamına gelir.


Bu, iki terimin özünü yakaladığı için kabul edilen cevap IMO olmalıdır.
michid

2

(Böyle temel bir sorunun yıllarca doğru ve düzgün bir şekilde çözülmemesine oldukça şaşırdım ...)

Kısacası, hem eşzamanlılık hem de paralellik hesaplamanın özellikleridir .

Fark açısından, Robert Harper'ın açıklaması :

Anlaşılması gereken ilk şey, paralelliğin eşzamanlılık ile bir ilgisi olmadığıdır . Eşzamanlılık, programların (veya bileşenlerinin) belirsiz bileşimi ile ilgilidir . Paralellik, deterministik davranışa sahip programların asimtotik etkinliği ile ilgilidir . Eşzamanlılık tamamen yönetilemez olanı yönetmekle ilgilidir: olaylar bizim kontrolümüz dışındaki nedenlerle gelir ve onlara cevap vermeliyiz. Kullanıcı bir fare tıklattığında, ekran dikkat çekmekle birlikte, pencere yöneticisi yanıt vermelidir. Bu tür durumlar doğası gereği belirsizdir, ancak proforma da uygularızbelirsizlikçi bir ortamda bileşenlerin olayları keyfi bir sırada işaret ettiğini iddia ederek ve ortaya çıktıklarında bunlara yanıt vermeliyiz. Belirsiz kompozisyon, güçlü bir program yapılandırma fikridir. Paralellik ise, deterministik bir hesaplamanın alt hesaplamaları arasındaki bağımlılıklarla ilgilidir. Sonuçta şüphe yok, ancak bunu başarmanın birçok yolu var, bazıları diğerlerinden daha verimli. Bu fırsatları kendi yararımıza kullanmak istiyoruz.

Bunlar programlarda ortogonal özellikler olabilir. Ek çizimler için bu blog gönderisini okuyun . Ve bu , programlamadaki bileşenler gibi, iş parçacıkları gibi fark hakkında biraz daha tartıştı .

İş parçacığı veya çoklu görevin, daha somut amaçlara hizmet eden hesaplama uygulamaları olduğuna dikkat edin. Paralellik ve eşzamanlılık ile ilgili olabilirler, ancak önemli bir şekilde değiller. Bu yüzden açıklamaya başlamak için pek iyi girişler değildir.

Bir diğer vurgu: (fiziksel) "zaman" ın burada tartışılan özelliklerle neredeyse hiçbir ilgisi yoktur. Zaman, özelliklerin önemini göstermek için ölçümün uygulanmasının bir yoludur, ancak özden uzaktır. Zaman karmaşıklığında "zaman" rolünü iki kez düşünün - az çok benzer, hatta bu durumda ölçüm genellikle daha önemlidir.


2

"Eşzamanlı" aynı anda her şeyi - her şeyi - yapıyor. Farklı şeyler veya aynı şeyler olabilirler. Kabul edilmemiş olan cevaba rağmen, "aynı anda görünmek" ile ilgili değildir. Gerçekten aynı zamanda. Eşzamanlı kodu çalıştırmak için bir ana bilgisayarda paylaşılan bellek veya farklı ana bilgisayarlarda dağıtılmış bellek kullanan birden fazla CPU çekirdeğine ihtiyacınız vardır. Eşzamanlı olarak aynı anda çalışan 3 ayrı görevin boru hattı bir örnektir: Görev seviyesi-2, görev seviyesi-1 tarafından tamamlanan birimleri beklemek zorundadır ve görev seviyesi-3, tarafından tamamlanan iş birimlerini beklemek zorundadır görev düzey-2. Başka bir örnek, 1-üreticinin 1-tüketici ile eşzamanlılığıdır; veya birçok üretici ve 1 tüketici; okuyucular ve yazarlar; vd.

"Paralel" aynı şeyleri aynı anda yapıyor. Eşzamanlı ama aynı zamanda aynı davranışta ve en tipik olarak farklı verilerde oluyor. Aynı işlemi tekrar tekrar çalıştırdığınız için Matris cebiri genellikle paralelleştirilebilir: Örneğin, bir matrisin sütun toplamları aynı anda aynı davranış (toplam) kullanılarak farklı sütunlarda hesaplanabilir. Sütunları mevcut işlemci çekirdekleri arasında bölmek (bölmek) için yaygın bir stratejidir, böylece her işlemci çekirdeği tarafından işlenenle aynı miktarda işe (sütun sayısı) sahip olursunuz. İşi bölmenin bir başka yolu, işini bitiren işçilerin işi dağıtan ve her şey bitene kadar dinamik olarak daha fazla iş elde eden bir yöneticiye geri döndüğü görev çantasıdır. Biletleme algoritması başka bir şeydir.

Sadece sayısal kod paralelleştirilemez. Dosyalar çok sık paralel olarak işlenebilir. Doğal bir dil işleme uygulamasında, milyonlarca belge dosyasının her biri için belgedeki belirteç sayısını saymanız gerekebilir. Bu paraleldir, çünkü her dosya için aynı davranış olan belirteçleri sayıyorsunuzdur.

Diğer bir deyişle, paralellik aynı davranışın aynı anda gerçekleştirilmesidir. Eşzamanlı olarak aynı zamanda anlamına gelir, ancak mutlaka aynı davranış değildir. Paralel, aynı şeyin aynı anda gerçekleştiği belirli bir eşzamanlılık türüdür.

Örneğin terimler atom talimatları, kritik bölümler, karşılıklı dışlama, dönüş bekletme, semaforlar, monitörler, engeller, mesaj geçirme, harita azaltma, kalp atışı, halka, biletleme algoritmaları, iş parçacıkları, MPI, OpenMP'yi içerir.

Gregory Andrews'un çalışması en iyi ders kitabıdır: Çok iş parçacıklı, Paralel ve Dağıtık Programlama.


1

Harika, neyi anladığımı göstermek için bir senaryo yapmama izin verin. Diyelim ki 3 çocuk var: A, B, C. A ve B konuş, C dinle. A ve B için paraleldirler: A: Ben A. B: Ben B.

Ancak C için beyninin A ve B'yi dinlemek için eşzamanlı süreci yapması gerekir, belki de: Ben IA'yım B.


1

Eşzamanlılık basit, birden fazla görevin çalıştığı anlamına gelir (paralel olarak gerekli değildir). Örneğin, herhangi bir anda 3 göreve sahip olduğumuzu varsayalım: birden fazla çalışıyor olabilir veya hepsi aynı anda çalışıyor olabilir.

Paralellik, tam anlamıyla paralel olarak ilerledikleri anlamına gelir. Bu durumda, her üçünün de aynı anda çalışması gerekir.


1

Pike'ın "eşzamanlılık" kavramı kasıtlı bir tasarım ve uygulama kararıdır. Eşzamanlı yetenekli bir program tasarımı, davranışsal "paralellik" gösterebilir veya göstermeyebilir; çalışma ortamına bağlıdır.

Eşzamanlılık için tasarlanmamış bir programın sergilediği paralellik istemezsiniz. :-) Ancak, ilgili faktörler (güç tüketimi, performans vb.) İçin net bir kazanç olduğu ölçüde, ana bilgisayar sisteminin mümkün olduğunda yürütmesini paralelleştirebilmesi için maksimum eşzamanlı bir tasarım istersiniz.

Pike's Go programlama dili bunu en uç noktalarda göstermektedir: işlevleri aynı anda düzgün çalışabilen tüm iş parçacıklarıdır, yani bir işlevi çağırmak her zaman sistem bunu yapabiliyorsa arayanla paralel çalışacak bir iş parçacığı oluşturur. Yüzlerce hatta binlerce ipliğe sahip bir uygulama dünyasında mükemmel bir şekilde sıradan. (Ben Go uzmanı değilim, bu sadece benim almam.)

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.