Wat is het verschil tussen gelijktijdigheid en parallellisme?

Wat is het verschil tussen gelijktijdigheid en parallellisme?

Voorbeelden worden op prijs gesteld.


Antwoord 1, autoriteit 100%

Gelijktijdigheidis wanneer twee of meer taken kunnen worden gestart, uitgevoerd en voltooid in overlappende perioden. Het betekent niet noodzakelijk dat ze ooit allebei op hetzelfde momentactief zullen zijn. Bijvoorbeeld multitaskingop een single-core machine.

Parallismeis wanneer taken letterlijktegelijkertijd worden uitgevoerd, bijvoorbeeld op een multicore-processor.


Citeer Sun Multithreaded Programming Guide:

  • Gelijktijdigheid: een voorwaarde die bestaat wanneer ten minste twee threads vooruitgang boeken. Een meer algemene vorm van parallellisme die time-slicing kan omvatten als een vorm van virtueel parallellisme.

  • Parallisme: een toestand die optreedt wanneer ten minste twee threads tegelijkertijd worden uitgevoerd.


Antwoord 2, autoriteit 44%

Waarom de verwarring bestaat

Er bestaat verwarring omdat de woordenboekbetekenissen van beide woorden bijna hetzelfde zijn:

  • Gelijktijdig: bestaand, gebeurt of tegelijkertijd gedaan (dictionary.com)
  • Parallel: zeer vergelijkbaar en gebeurt vaak tegelijkertijd (merriam webster).

Toch is de manier waarop ze worden gebruikt in de informatica en het programmeren nogal verschillend. Hier is mijn interpretatie:

  • Gelijktijdigheid: onderbreekbaarheid
  • Parallisme: onafhankelijkheid

Dus wat bedoel ik met bovenstaande definities?

Ik zal het verduidelijken met een analogie uit de echte wereld. Stel dat u 2 zeer belangrijke taken op één dag moet doen:

  1. Een paspoort kopen
  2. Een presentatie laten doen

Het probleem is dat je voor taak 1 naar een extreem bureaucratisch overheidsbureau moet gaan waar je 4 uur in de rij moet wachten om je paspoort te krijgen. Ondertussen is taak 2 vereist door uw kantoor en het is een kritieke taak. Beide moeten op een specifieke dag klaar zijn.

Geval 1: Opeenvolgende uitvoering

Normaal gesproken rijd je 2 uur naar het paspoortkantoor, wacht je 4 uur in de rij, krijg je de taak gedaan, rijd je twee uur terug, ga je naar huis, blijf je nog 5 uur wakker en krijg je de presentatie klaar.

Geval 2: Gelijktijdige uitvoering

Maar je bent slim. Je plant vooruit. Je hebt een laptop bij je en terwijl je in de rij staat te wachten, ga je aan de slag met je presentatie. Op deze manier hoef je, als je eenmaal thuis bent, slechts 1 uur extra te werken in plaats van 5.

In dit geval worden beide taken door jou gedaan, alleen in stukjes. Je onderbrak de paspoorttaak terwijl je in de rij stond te wachten en werkte aan de presentatie. Toen je nummer werd gebeld, onderbrak je de presentatietaak en schakelde je over naar de paspoorttaak. De tijdwinst was in wezen mogelijk door de onderbreekbaarheid van beide taken.

Concurrency, IMO, kan worden opgevat als de eigenschap ‘isolatie’ in ACID. Twee databasetransacties worden als geïsoleerd beschouwd als subtransacties op elke interleaved manier kunnen worden uitgevoerd en het uiteindelijke resultaat hetzelfde is alsof de twee taken opeenvolgend zijn uitgevoerd. Onthoud dat voor zowel de paspoort- als de presentatietaken jij de enige beul bent.

Geval 3: Parallelle uitvoering

Omdat je zo’n slimme kerel bent, ben je duidelijk een hogere, en heb je een assistent. Dus, voordat je vertrekt om met de paspoorttaak te beginnen, bel je hem en zeg je dat hij de eerste versie van de presentatie moet voorbereiden. U besteedt uw hele dag en voltooit de paspoorttaak, komt terug en ziet uw e-mails en vindt het ontwerp van de presentatie. Hij heeft behoorlijk degelijk werk geleverd en met wat aanpassingen in nog 2 uur, maak je het af.

Omdat uw assistent net zo slim is als u, kon hij er onafhankelijkaan werken, zonder u voortdurend om opheldering te hoeven vragen. Vanwege de onafhankelijkheid van de taken werden ze dus tegelijkertijd uitgevoerd door twee verschillende beulen.

Nog steeds bij mij? Oké…

Geval 4: Gelijktijdig maar niet parallel

Weet u nog uw paspoorttaak, waar u in de rij moet wachten?
Omdat het jepaspoort is, kan je assistent niet op je wachten. De paspoorttaak heeft dus onderbreekbaarheid(u kunt deze stoppen terwijl u in de rij staat, en later hervatten wanneer uw nummer wordt gebeld), maar geen onafhankelijkheid(uw assistent kan niet wacht in uw plaats).

Geval 5: parallel maar niet gelijktijdig

Stel dat het overheidskantoor een veiligheidscontrole heeft om het pand te betreden. Hier moet je alle elektronische apparaten verwijderen en inleveren bij de officieren, en zij geven je apparaten pas terug nadat je je taak hebt voltooid.

In dit geval is de paspoorttaak niet onafhankelijkof onderbreekbaar. Ook als je in de rij staat te wachten, kun je niet aan iets anders werken omdat je niet over de benodigde apparatuur beschikt.

Evenzo, stel dat de presentatie zo sterk wiskundig van aard is dat je gedurende ten minste 5 uur 100% concentratie nodig hebt. Je kunt het niet doen terwijl je in de rij staat voor de paspoorttaak, zelfs als je je laptop bij je hebt.

In dit geval is de presentatietaak onafhankelijk(u of uw assistent kan 5 uur gerichte inspanning leveren), maar niet onderbreekbaar.

Case 6: Gelijktijdige en parallelle uitvoering

Stel nu dat je niet alleen je assistent aan de presentatie toewijst, maar ook een laptop bij je hebt voor de paspoorttaak. Terwijl je in de rij staat te wachten, zie je dat je assistent de eerste 10 dia’s in een gedeeld deck heeft gemaakt. U stuurt commentaar op zijn werk met enkele correcties. Later, wanneer u thuiskomt, heeft u in plaats van 2 uur om het ontwerp af te ronden, slechts 15 minuten nodig.

Dit was mogelijk omdat de presentatietaak onafhankelijkheeft (een van jullie kan het) en onderbreekbaarheid(je kunt het stoppen en later hervatten). U voerde dus gelijktijdig beidetaken uit en voerde de presentatietaak parallel uit.

Laten we zeggen dat het overheidsbureau niet alleen overdreven bureaucratisch is, maar ook corrupt. U kunt dus uw identificatie tonen, invoeren, in de rij wachten tot uw nummer wordt gebeld, een bewaker en iemand anders omkopen om uw positie in de rij te behouden, naar buiten sluipen, terugkomen voordat uw nummer wordt gebeld en het wachten hervatten jezelf.

In dit geval kunt u zowel de paspoort- als de presentatietaken gelijktijdig en parallel uitvoeren. Je kunt naar buiten sluipen en je positie wordt ingenomen door je assistent. Jullie kunnen dan allebei aan de presentatie werken, enz.


Terug naar computerwetenschappen

In de computerwereld zijn hier voorbeeldscenario’s die typerend zijn voor elk van deze gevallen:

  • Geval 1:Verwerking onderbreken.
  • Geval 2:Wanneer er slechts één processor is, maar alle uitvoerende taken wachttijden hebben vanwege I/O.
  • Geval 3:Vaak gezien als we het hebben over map-reduce of hadoop-clusters.
  • Geval 4:Ik denk dat Geval 4 zeldzaam is. Het is ongebruikelijk dat een taak gelijktijdig is, maar niet parallel. Maar het zoukunnen gebeuren. Stel bijvoorbeeld dat uw taak toegang vereist tot een speciale rekenchip die alleen toegankelijk is via processor-1. Dus zelfs als processor-2 vrij is en processor-1 een andere taak uitvoert, kan de speciale rekentaak niet doorgaan op processor-2.
  • Geval 5:ook zeldzaam, maar niet zo zeldzaam als Geval 4. Een niet-gelijktijdige code kan een kritiek gebied zijn dat wordt beschermd door mutexen. Als het eenmaal is gestart, moethet volledig worden uitgevoerd. Er kunnen echter twee verschillende kritieke regio’s tegelijkertijd werken op twee verschillende processors.
  • Case 6:IMO, de meeste discussies over parallel of gelijktijdig programmeren gaan in feite over Case 6. Dit is een mix en match van zowel parallelle als gelijktijdige uitvoeringen.

Concurrency and Go

Als je begrijpt waarom Rob Pike zegt dat gelijktijdigheid beter is, moet je begrijpen dat de reden dat is. Je hebt een heel lange taak waarin er meerdere wachttijden zijn waarin je wacht op een aantal externe bewerkingen zoals het lezen van bestanden, het downloaden van een netwerk. In zijn lezing zegt hij alleen maar: “breek deze lange opeenvolgende taak gewoon op, zodat je iets nuttigs kunt doen terwijl je wacht.” Daarom praat hij met verschillende gophers over verschillende organisaties.

De kracht van Go zit nu in het heel eenvoudig maken van dit breken met gotrefwoord en kanalen. Er is ook uitstekende onderliggende ondersteuning in de runtime om deze goroutines in te plannen.

Maar is in wezen gelijktijdigheid beter dan parallellisme?

Zijn appels beter dan peren?


Antwoord 3, autoriteit 18%

Ik hou van de toespraak van Rob Pike: gelijktijdigheid is geen parallellisme (het is beter!)
(dia’s)
(overleg)

Rob heeft het meestal over Go en behandelt de kwestie van gelijktijdigheid versus parallellisme meestal in een visuele en intuïtieve uitleg! Hier is een korte samenvatting:

Taak:laten we een stapel verouderde taalhandleidingen verbranden! Een voor een!

Taak

Gelijktijdigheid:er zijn veel gelijktijdige decomposities van de taak! Een voorbeeld:

Gophers

Parallelisme:de vorige configuratie vindt parallel plaats als er minstens 2 gophers tegelijk aan het werk zijn of niet.


Antwoord 4, autoriteit 11%

Om toe te voegen aan wat anderen hebben gezegd:

Gelijktijdigheid is als een jongleur die met veel ballen jongleert. Hoe het ook lijkt, de jongleur vangt/gooit slechts één bal per hand tegelijk. Parallellisme houdt in dat meerdere jongleurs tegelijkertijd met ballen jongleren.


Antwoord 5, autoriteit 10%

Stel dat je een programma hebt met twee threads. Het programma kan op twee manieren worden uitgevoerd:

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

In beide gevallen hebben we concurrency door het simpele feit dat we meer dan één thread hebben.

Als we dit programma op een computer met een enkele CPU-kern zouden draaien, zou het besturingssysteem schakelen tussen de twee threads, waardoor één thread tegelijk kan worden uitgevoerd.

Als we dit programma op een computer met een multi-core CPU zouden draaien, zouden we de twee threads parallelnaast elkaar kunnen laten lopen op exact hetzelfde moment.


Antwoord 6, autoriteit 4%

Gelijktijdigheid:als twee of meer problemen worden opgelost door een enkele processor.
alt-tekst

Parallelisme:als één probleem wordt opgelost door meerdere processors.

alt-tekst


Antwoord 7, autoriteit 4%

Stel je voor dat je een nieuwe programmeertaal leert door een videozelfstudie te bekijken. Je moet de video pauzeren, toepassen wat er in de code is gezegd en dan verder kijken. Dat is gelijktijdigheid.

Nu ben je een professionele programmeur. En je luistert graag naar rustige muziek tijdens het coderen. Dat is parallellisme.

Zoals Andrew Gerrand zei in GoLang Blog

Concurrency gaat over het omgaan met veel dingen tegelijk. parallellisme
gaat over veel dingen tegelijk doen.

Veel plezier.


Antwoord 8, autoriteit 3%

Ik zal proberen het uit te leggen met een interessant en gemakkelijk te begrijpen voorbeeld. 🙂

Verondersteldat een organisatie een schaaktoernooi organiseert waar 10 spelers (met gelijke schaakvaardigheden) een professionele kampioenschaker uitdagen. En aangezien schaken een 1:1-spel is, moeten organisatoren 10 spellen op een tijdefficiënte manier spelen, zodat ze het hele evenement zo snel mogelijk kunnen afronden.

Hopelijk zullen de volgende scenario’s gemakkelijk meerdere manieren beschrijven om deze 10 spellen te spelen:

1) SERIEEL– laten we zeggen dat de professional één voor één met elke persoon speelt, d.w.z. het spel begint en eindigt met één persoon en dan het volgende spel begint met de volgende persoon, enzovoort. Met andere woorden, ze besloten de spellen achter elkaar uit te voeren. Dus als een spel 10 minuten duurt om te voltooien, dan zullen 10 spellen 100 minuten duren. Neem ook aan dat de overgang van het ene spel naar het andere 6 seconden duurt, dan zal het voor 10 spellen 54 seconden zijn (ongeveer 1 minuut).

dus het hele evenement duurt ongeveer 101 minuten (SLECHTSTE AANPAK)

2) GELIJKTIJDIG– laten we zeggen dat de professional zijn beurt speelt en naar de volgende speler gaat, zodat alle 10 spelers tegelijkertijd spelen, maar de professionele speler is niet met twee personen tegelijk, hij speelt zijn draai en gaat door naar de volgende persoon. Neem nu aan dat de professionele speler 6 seconden nodig heeft om zijn beurt te spelen en ook de overgangstijd van de professionele speler met twee spelers is 6 seconden, dus de totale overgangstijd om terug te gaan naar de eerste speler is 1 minuut (10×6 seconden). Daarom zijn er tegen de tijd dat hij terug is bij de eerste persoon met wie het evenement is gestart, 2 minuten verstreken (10xtime_per_turn_by_champion + 10xtransition_time=2mins)

Ervan uitgaande dat alle spelers 45 seconden nodig hebben om hun beurt te voltooien, dus op basis van 10 minuten per spel vanaf het SERIAL-evenement, is het nr. van ronden voordat een spel eindigt moet 600/(45+6) = 11 ronden (ongeveer)

Het hele evenement wordt dus ongeveer voltooid over 11xtime_per_turn_by_player_&_champion + 11xtransition_time_across_10_players = 11×51 + 11x60sec= 561 + 660 = 1221sec = 20.35 minuten (ongeveer)

ZIE DE VERBETERING van 101 minuten tot 20,35 minuten (BETERE AANPAK)

3) PARALLEL– laten we zeggen dat de organisatoren wat extra geld krijgen en dus besloten om twee professionele kampioensspelersuit te nodigen (beide even capabel) en de set van dezelfde 10 spelers te verdelen (uitdagers) in twee groepen van elk 5 en toegewezen aan twee kampioenen, dwz elk één groep. Nu verloopt het evenement parallel in deze twee sets, d.w.z. ten minste twee spelers (één in elke groep) spelen tegen de twee professionele spelers in hun respectievelijke groep.

Binnen de groep neemt de professionele speler echter één speler tegelijk (d.w.z. opeenvolgend), dus zonder enige berekening kun je gemakkelijk afleiden dat het hele evenement ongeveer in 101/2 = 50,5 minuten zal worden voltooid

ZIE DE VERBETERING van 101 minuten tot 50,5 minuten (GOEDE AANPAK)

4) GELIJKTIJDIG + PARALLEL– Laten we in het bovenstaande scenario zeggen dat de twee kampioensspelers gelijktijdig zullen spelen (lees 2e punt) met de 5 spelers in hun respectievelijke groepen, dus nu spelen er meerdere groepen parallel, maar binnen een groep lopen ze gelijktijdig.

Dus de games in één groep zullen ongeveer worden voltooid in 11xtime_per_turn_by_player_&_champion + 11xtransition_time_across_5_players = 11×51 + 11×30 = 600 + 330 = 930sec = 15,5 minuten (ongeveer)

Dus het hele evenement (waarbij twee van dergelijke parallelle hardloopgroepen betrokken zijn) zal ongeveer 15,5 minuten duren

ZIE DE VERBETERING van 101 minuten tot 15,5 minuten (BESTE AANPAK)

OPMERKING:in het bovenstaande scenario, als je 10 spelers vervangt door 10 vergelijkbare taken en twee professionele spelers door twee CPU-kernen, blijft de volgende volgorde gelden:

SERIEEL > PARALLEL > GELIJKTIJDIG > GELIJKTIJDIG+PARALLEL

(OPMERKING: deze volgorde kan veranderen voor andere scenario’s, aangezien deze volgorde sterk afhangt van de onderlinge afhankelijkheid van taken, communicatiebehoeften, z/w-taken en overgangsoverhead z/w-taken)


Antwoord 9, autoriteit 3%

Eenvoudig voorbeeld:

Gelijktijdig is: “Twee wachtrijen voor toegang tot één geldautomaat”

Parallel is: “Twee wachtrijen en twee geldautomaten”


Antwoord 10, autoriteit 2%

Parallismeis de gelijktijdige uitvoering van processen op een multiple cores per CPUof multiple CPUs (on a single motherboard).

Gelijktijdigheidis wanneer Parallismewordt bereikt op een single core/CPUdoor gebruik te maken van planningsalgoritmendie de CPU’s tijd (time-slice). Processen zijn doorschoten.

Eenheden:

  • 1 of veel cores in een enkele CPU (vrijwel alle moderne processors)
  • 1 of veel CPU’s op een moederbord (denk aan old school servers)
  • 1 applicatie is 1 programma (denk aan Chrome-browser)
  • 1 programma kan 1 of meerdere processen hebben (denk dat elk Chrome-browsertabblad een proces is)
  • 1 proces kan 1 of meerdere threads van 1 programma hebben (Chrome-tabblad dat YouTube-video afspeelt in 1 thread, een andere thread is ontstaan voor opmerkingen
    sectie, een andere voor gebruikers login info)
  • Dus 1 programma kan 1 of meerdere uitvoeringsthreads hebben
  • 1 proces is thread(s)+allocated memory resources by OS(heap, registers, stack, class memory)

Antwoord 11, autoriteit 2%

Ze lossen verschillende problemen op. Gelijktijdigheid lost het probleem op van schaarse CPU-bronnen en veel taken. U maakt dus threads of onafhankelijke uitvoeringspaden door middel van code om tijd te besteden aan de schaarse bron. Tot voor kort domineerde gelijktijdigheid de discussie vanwege de beschikbaarheid van de CPU.

Parallisme lost het probleem op van het vinden van voldoende taken en geschikte taken (die correct kunnen worden opgesplitst) en deze te verdelen over overvloedige CPU-bronnen. Parallelisme is er natuurlijk altijd geweest, maar het komt op de voorgrond omdat multi-coreprocessors zo goedkoop zijn.


Antwoord 12, autoriteit 2%

gelijktijdigheid:
meerdere uitvoeringsstromen met de mogelijkheid om middelen te delen

Bijvoorbeeld:
twee threads die strijden om een I/O-poort.

paralelisme:
een probleem opsplitsen in meerdere vergelijkbare brokken.

Bijvoorbeeld:
een groot bestand ontleden door twee processen uit te voeren op elke helft van het bestand.


Antwoord 13, autoriteit 2%

De uitvoering van gelijktijdig programmeren heeft 2 soorten: niet-parallel gelijktijdig programmeren en parallel gelijktijdig programmeren (ook bekend als parallellisme).

Het belangrijkste verschil is dat voor het menselijk oog threads in niet-parallelle gelijktijdigheid op hetzelfde moment lijken te lopen, maar in werkelijkheid niet. In niet-parallelle gelijktijdigheid schakelen threads snel om en gebruiken ze om de beurt de processor door middel van time-slicing.
Hoewel er in parallellisme meerdere processors beschikbaar zijn, kunnen meerdere threads tegelijkertijd op verschillende processors worden uitgevoerd.
voer hier de afbeeldingsbeschrijving in

Referentie: Inleiding tot gelijktijdigheid in programmeertalen


Antwoord 14

Gelijktijdigheid=> Wanneer meerdere taken worden uitgevoerd in overlappende tijdsperioden met gedeelde bronnen (waardoor mogelijk het gebruik van bronnen wordt gemaximaliseerd).

Parallel=> wanneer een enkele taak is verdeeld in meerdere eenvoudige onafhankelijke subtaken die tegelijkertijd kunnen worden uitgevoerd.


Antwoord 15

Gelijktijdigheid versus parallellisme

Rob Pike in ‘Gelijktijdigheid is geen parallellisme’

Concurrency gaat over het omgaan met veel dingen tegelijk.

Parallisme betekent veel dingen tegelijk doen.

[Concurrency-theorie]

Gelijktijdigheid – verwerkt meerdere taken tegelijk
Parallellisme – behandelt meerdere threads tegelijk

Mijn visie op gelijktijdigheid en parallellisme

[Synchronisatie vs Async]


Antwoord 16

Zie het als servicewachtrijen waarbij de server alleen de eerste taak in een wachtrij kan uitvoeren.

1 server , 1 taakwachtrij (met 5 taken) -> geen gelijktijdigheid, geen parallellisme (slechts één taak wordt uitgevoerd tot voltooiing, de volgende taak in de wachtrij moet wachten tot de servicetaak is voltooid en er is geen andere server om deze te onderhouden)

1 server, 2 of meer verschillende wachtrijen (met 5 taken per wachtrij) -> gelijktijdigheid (aangezien de server tijd deelt met alle eerste taken in wachtrijen, gelijk of gewogen), nog steeds geen parallellisme omdat er op elk moment één en enige taak wordt uitgevoerd.

2 of meer servers , één wachtrij -> parallellisme (2 taken tegelijkertijd uitgevoerd) maar geen gelijktijdigheid (server deelt geen tijd, de 3e taak moet wachten tot een van de servers is voltooid.)

2 of meer servers, 2 of meer verschillende wachtrijen -> gelijktijdigheid en parallellisme

Met andere woorden, gelijktijdigheid is tijd delen om een taak te voltooien, het KAN even lang duren om de taak te voltooien, maar het begint in ieder geval vroeg. Belangrijk is dat jobs in kleinere jobs kunnen worden opgedeeld, wat interleaving mogelijk maakt.

Parallelisme wordt bereikt met gewoon meer CPU’s, servers, mensen enz. die parallel lopen.

Houd er rekening mee dat als de middelen worden gedeeld, puur parallellisme niet kan worden bereikt, maar dit is waar gelijktijdigheid het beste praktische nut heeft, door een andere baan op zich te nemen die die bron niet nodig heeft.


Antwoord 17

Ik ga een antwoord geven dat een beetje in strijd is met enkele van de populaire antwoorden hier. Concurrency is naar mijn mening een algemene term die parallellisme omvat. Gelijktijdigheidis van toepassing op elke situatie waarin verschillende taken of werkeenheden elkaar in de tijd overlappen. Parallismeis meer specifiek van toepassing op situaties waarin verschillende werkeenheden tegelijkertijd worden geëvalueerd/uitgevoerd. De bestaansreden van parallellisme is het versnellen van software die kan profiteren van meerdere fysieke computerbronnen. Het andere belangrijke concept dat onder gelijktijdigheid past, is interactiviteit. Interactiviteitis van toepassing wanneer de overlapping van taken vanaf de buitenwereld waarneembaar is. De bestaansreden van interactiviteit is het maken van software die reageert op real-world entiteiten zoals gebruikers, netwerkpeers, hardwarerandapparatuur, enz.

Parallelisme en interactiviteit zijn bijna volledig onafhankelijke dimensies van gelijktijdigheid. Voor een bepaald project kunnen ontwikkelaars zich zorgen maken over een van beide, beide of geen van beide. Ze hebben de neiging om door elkaar te lopen, niet in de laatste plaats omdat de gruwel die threads zijn, een redelijk gemakkelijke primitief geeft om beide te doen.

Iets meer details over parallellisme:

Parallisme bestaat op zeer kleine schaal (bijvoorbeeld parallellisme op instructieniveau in processors), middelgrote schalen (bijvoorbeeld multicore-processors) en grote schalen (bijvoorbeeld krachtige computerclusters). De druk op softwareontwikkelaars om meer parallellisme op threadniveau bloot te leggen, is de afgelopen jaren toegenomen vanwege de groei van multicore-processors. Parallellisme is nauw verbonden met het begrip afhankelijkheid. Afhankelijkheden beperken de mate waarin parallellisme kan worden bereikt; twee taken kunnen niet parallel worden uitgevoerd als de ene van de andere afhankelijk is (speculatie negeren).

Er zijn veel patronen en kaders die programmeurs gebruiken om parallellisme uit te drukken: pijplijnen, taakpools, geaggregeerde bewerkingen op gegevensstructuren (“parallelle arrays”).

Iets meer details over interactiviteit:

De meest eenvoudige en gebruikelijke manier om interactiviteit te doen, is met gebeurtenissen (d.w.z. een gebeurtenislus en handlers/callbacks). Voor eenvoudige taken zijn evenementen geweldig. Proberen om complexere taken met gebeurtenissen uit te voeren, komt in het rippen van de stapel terecht (ook bekend als callback hell; a.k.a. control inversion). Als je genoeg hebt van evenementen, kun je meer exotische dingen proberen, zoals generatoren, coroutines (ook bekend als Async/Await) of coöperatieve threads.

Uit liefde voor betrouwbare software, gebruik alsjeblieft geen discussielijnen als je interactiviteit zoekt.

Curmudgeonliness

Ik houd niet van de slogan van Rob Pike “gelijktijdigheid is geen parallellisme; het is beter”. Gelijktijdigheid is niet beter of slechter dan parallellisme. Gelijktijdigheid omvat interactiviteit die niet op een betere/slechtere manier kan worden vergeleken met parallellisme. Het is hetzelfde als zeggen “controlestroom is beter dan gegevens”.


Antwoord 18

In de elektronica vertegenwoordigen serieelen paralleleen soort statische topologie, die het feitelijke gedrag van het circuit bepaalt. Als er geen gelijktijdigheid is, is parallelisme deterministisch.

Om dynamische, tijdgerelateerde verschijnselente beschrijven, gebruiken we de termen sequentieelen gelijktijdig. Een bepaalde uitkomst kan bijvoorbeeld worden verkregen via een bepaalde volgordevan taken (bijvoorbeeld een recept). Als we met iemand praten, produceren we een reeks woorden. In werkelijkheid vinden echter veel andere processen plaats op hetzelfde moment, en dus overeenkomenmet het daadwerkelijke resultaat van een bepaalde handeling. Als veel mensen tegelijkertijd praten, kunnen gelijktijdige gesprekken onze volgorde verstoren, maar de resultaten van deze interferentie zijn niet van tevoren bekend. Gelijktijdigheid introduceert onbepaaldheid.

De seriële/parallelle en sequentiële/gelijktijdige karakterisering zijn orthogonaal. Een voorbeeld hiervan is in digitale communicatie. In een seriële adapterwordt een digitaal bericht tijdelijk (d.w.z. sequentieel) gedistribueerd langs dezelfde communicatielijn (bijvoorbeeld één draad). In een parallelle adapterwordt deze ook verdeeld over parallelle communicatielijnen (bijv. veel draden), en vervolgens gereconstrueerd aan de ontvangende kant.

Laten we ons een spel voorstellen, met 9 kinderen. Als we ze als een ketting weggooien, eerst een bericht geven en het aan het einde ontvangen, zouden we een seriële communicatie hebben. Meer woorden vormen de boodschap, bestaande uit een opeenvolging van communicatie-eenheden.

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

Dit is een sequentieel procesgereproduceerd op een seriële infrastructuur.

Laten we nu een afbeelding maken om de kinderen in groepen van 3 te verdelen. We verdelen de zin in drie delen, geven de eerste aan het kind van de lijn links van ons, de tweede aan het kind van de middellijn, enz.

p>

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

Dit is een sequentieel procesgereproduceerd op een parallelle infrastructuur(hoewel nog steeds gedeeltelijk geserialiseerd).

In beide gevallen, aangenomen dat er een perfecte communicatie is tussen de kinderen, is het resultaat bepaaldvan tevoren.

Als er andere personen zijn die op hetzelfde moment als u met het eerste kind praten, dan hebben we gelijktijdige processen. We weten niet welk proces door de infrastructuur wordt overwogen, dus het uiteindelijke resultaat is vooraf niet bepaald.


Antwoord 19

Concurrency is de algemene vorm van parallellisme. Een parallel programma kan bijvoorbeeld ook gelijktijdig worden genoemd, maar omgekeerd is niet waar.

  1. Gelijktijdige uitvoering is mogelijk op één processor (meerdere threads, beheerd door planner of thread-pool)

  2. Parallelle uitvoering is niet mogelijk op één processor, maar op meerdere processors. (Eén proces per processor)

  3. Gedistribueerd computergebruik is ook een gerelateerd onderwerp en het kan ook gelijktijdig computergebruik worden genoemd, maar omgekeerd is niet waar, zoals parallellisme.

Lees deze onderzoekspaper voor details
Concepten van gelijktijdig programmeren


Antwoord 20

Ik vond deze grafische weergave van een ander antwoord erg leuk – ik denk dat het de vraag veel beter beantwoordt dan veel van de bovenstaande antwoorden

Parallisme versus gelijktijdigheid
Wanneer twee threads parallel lopen, worden ze beide tegelijkertijd uitgevoerd. Als we bijvoorbeeld twee threads hebben, A en B, dan ziet hun parallelle uitvoering er als volgt uit:

CPU 1: Een ————————->

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

Als twee threads gelijktijdig worden uitgevoerd, overlapt hun uitvoering. Overlapping kan op twee manieren gebeuren: ofwel worden de threads tegelijkertijd uitgevoerd (d.w.z. parallel, zoals hierboven), ofwel worden hun uitvoeringen op de processor verschoven, zoals:

CPU 1: Een ———–> B ———-> Een ———–> B ———->

Dus voor onze doeleinden kan parallellisme worden gezien als een speciaal geval van gelijktijdigheid

Bron: Hier nog een antwoord

Hopelijk helpt dat.


Antwoord 21

Uit het boek Linux System Programmingdoor Robert Love:

Gelijktijdigheid, parallellisme en rassen

Draden creëren twee gerelateerde maar verschillende fenomenen: gelijktijdigheid en
parallellisme. Beide zijn bitterzoet en raken aan de kosten van draadsnijden
evenals de voordelen ervan. Gelijktijdigheidis het vermogen van twee of meer
threads om uit te voeren in overlappende tijd perioden. Parallismeis
de mogelijkheid om twee of meer threads gelijktijdiguit te voeren.
Gelijktijdigheid kan optreden zonder parallellisme: bijvoorbeeld multitasking
op een systeem met één processor. Parallellisme (soms benadrukt als
echt parallellisme) is een specifieke vorm van gelijktijdigheid die meerdere processors vereist (of een enkele processor die meerdere engines aankan
van uitvoering, zoals een GPU). Met gelijktijdigheid maken meerdere threads
vooruitgang boeken, maar niet noodzakelijk tegelijkertijd. Met
parallellisme, threads worden letterlijk parallel uitgevoerd, waardoor
multithreaded programma’s om meerdere processors te gebruiken.

Concurrency is een programmeerpatroon, een manier om problemen te benaderen.
Parallellisme is een hardwarefunctie die kan worden bereikt door gelijktijdigheid.
Beide zijn nuttig.

Deze uitleg komt overeen met het geaccepteerde antwoord. Eigenlijk zijn de concepten veel eenvoudiger dan we denken. Denk niet dat ze magisch zijn. Gelijktijdigheid is ongeveer een tijdsperiode, terwijl parallellisme ongeveer op hetzelfde moment, gelijktijdigis.


Antwoord 22

De eenvoudigste en meest elegante manier om de twee te begrijpen is naar mijn mening deze. Gelijktijdigheid maakt interleaving van uitvoering mogelijk en kan dus de illusievan parallellisme geven. Dit betekent dat een gelijktijdig systeem uw YouTube-video kan uitvoeren naast het schrijven van een document in bijvoorbeeld Word. Het onderliggende besturingssysteem, dat een gelijktijdig systeem is, stelt deze taken in staat om hun uitvoering te verweven. Omdat computers instructies zo snel uitvoeren, lijkt het alsof ze twee dingen tegelijk doen.

Parallisme is wanneer zulke dingen in werkelijkheid zijnparallel. In het bovenstaande voorbeeld ziet u mogelijk dat de videoverwerkingscode op een enkele kern wordt uitgevoerd en dat de Word-toepassing op een andere wordt uitgevoerd. Merk op dat dit betekent dat een gelijktijdig programma ook parallel kan zijn! Door uw toepassing te structureren met threads en processen, kan uw programma de onderliggende hardware exploiteren en mogelijk parallel worden uitgevoerd.

Waarom dan niet alles parallel? Een reden is dat gelijktijdigheid een manier is om programma’s te structurerenen een ontwerpbeslissing is om de scheiding van zorgen te vergemakkelijken, terwijl parallellisme vaak wordt gebruikt in naam van prestaties. Een andere is dat sommige dingen fundamenteel niet volledig parallel kunnen worden gedaan. Een voorbeeld hiervan is het toevoegen van twee dingen aan de achterkant van een wachtrij – u kunt niet beide tegelijkertijd invoegen. Iets moet eerst en de ander erachter, anders verpest je de rij. Hoewel we een dergelijke uitvoering kunnen interleaven (en we dus een gelijktijdige wachtrij krijgen), kun je het niet parallel hebben.

Hopelijk helpt dit!


Antwoord 23

Gelijktijdigheidkan betrekking hebben op taken die al dan niet gelijktijdig worden uitgevoerd (ze kunnen inderdaad in afzonderlijke processors/cores worden uitgevoerd, maar ze kunnen ook in “ticks” worden uitgevoerd). Wat belangrijkis, is dat gelijktijdigheid altijd verwijst naar een deel van een grotere taak doen. Dus eigenlijk is het een onderdeel van sommige berekeningen. Je moet slim zijn over wat je tegelijkertijd kunt doen en wat niet en hoe je kunt synchroniseren.

Parallelismebetekent dat je gewoon wat dingen tegelijk doet. Ze hoeven geen deel uit te maken van het oplossen van één probleem. Uw threads kunnen bijvoorbeeld elk een enkel probleem oplossen. Natuurlijk zijn synchronisatie-dingen ook van toepassing, maar vanuit een ander perspectief.


Antwoord 24

‘Gelijktijdigheid’ is wanneer er meerdere dingen in uitvoeringzijn.

“Parallisme” is wanneer gelijktijdige dingen tegelijkertijdverlopen.


Voorbeelden van gelijktijdigheid zonder parallellisme:

  • Meerdere threads op één kern.
  • Meerdere berichten in een Win32-berichtenwachtrij.
  • Meerdere SqlDataReaders op een MARS-verbinding.
  • Meerdere JavaScript beloftenin een browsertabblad.

Houd er echter rekening mee dat het verschil tussen gelijktijdigheid en parallellisme vaak een kwestie van perspectief is. Bovenstaande voorbeelden zijn niet-parallel vanuit het perspectief van (waarneembare effecten van) het uitvoeren van uw code. Maar er is parallellisme op instructieniveau, zelfs binnen een enkele kern. Er zijn stukjes hardware die dingen parallel met de CPU doen en vervolgens de CPU onderbreken als ze klaar zijn. GPU kan naar het scherm tekenen terwijl je vensterprocedureof gebeurtenishandler wordt uitgevoerd. Het DBMS kan B-Trees doorkruisen voor de volgende query terwijl u nog steeds de resultaten van de vorige ophaalt. Browser kan bezig zijn met lay-out of netwerken terwijl uw Promise.resolve()wordt uitgevoerd. Enz, enz…

Dus daar ga je. De wereld is net zo rommelig als altijd 😉


Antwoord 25

Concurrent programmering betreft operaties die elkaar lijken te overlappen en houdt zich voornamelijk bezig met de complexiteit die ontstaat als gevolg van niet-deterministische besturingsstroom. De kwantitatieve kosten die gepaard gaan met gelijktijdige programma’s zijn doorgaans zowel doorvoer als latentie. Gelijktijdige programma’s zijn vaak IO-gebonden, maar niet altijd, b.v. gelijktijdige garbage collectors zijn volledig op de CPU. Het pedagogische voorbeeld van een gelijktijdig programma is een webcrawler. Dit programma initieert verzoeken om webpagina’s en accepteert de reacties gelijktijdig als de resultaten van de downloads beschikbaar komen, waardoor een reeks pagina’s wordt verzameld die al zijn bezocht. De controlestroom is niet-deterministisch omdat de antwoorden niet noodzakelijkerwijs in dezelfde volgorde worden ontvangen telkens wanneer het programma wordt uitgevoerd. Deze eigenschap kan het erg moeilijk maken om gelijktijdige programma’s te debuggen. Sommige toepassingen zijn fundamenteel gelijktijdig, b.v. webservers moeten gelijktijdig clientverbindingen afhandelen. Erlang is misschien wel de meest veelbelovende opkomende taal voor zeer gelijktijdig programmeren.

Parallel programmeren betreft bewerkingen die elkaar overlappen met het specifieke doel de doorvoer te verbeteren. De moeilijkheden van gelijktijdig programmeren worden omzeild door de regelstroom deterministisch te maken. Doorgaans spawnen programma’s sets van onderliggende taken die parallel worden uitgevoerd en de bovenliggende taak gaat pas verder als elke subtaak is voltooid. Dit maakt het veel gemakkelijker om parallelle programma’s te debuggen. Het harde deel van parallel programmeren is prestatie-optimalisatie met betrekking tot zaken als granulariteit en communicatie. Dit laatste is nog steeds een probleem in de context van multicores, omdat er aanzienlijke kosten zijn verbonden aan het overbrengen van gegevens van de ene cache naar de andere. Dichte matrix-matrix vermenigvuldigen is een pedagogisch voorbeeld van parallel programmeren en kan efficiënt worden opgelost door het verdeel-en-heers-algoritme van Straasen te gebruiken en de deelproblemen parallel aan te pakken. Cilk is misschien wel de meest veelbelovende taal voor krachtige parallelle programmering op computers met gedeeld geheugen (inclusief multicores).

Gekopieerd uit mijn antwoord: https://stackoverflow.com/a/3982782


Antwoord 26

(Het verbaast me nogal dat zo’n fundamentele vraag al jaren niet correct en netjes wordt opgelost…)

Kortom, zowel gelijktijdigheid als parallellisme zijn eigenschappen van computing.

Voor het verschil is hier de uitleg van Robert Harper:

Het eerste dat u moet begrijpen, is dat parallelisme niets te maken heeft met gelijktijdigheid. Concurrency houdt zich bezig met de niet-deterministische samenstellingvan programma’s (of hun componenten). Parallellisme houdt zich bezig met asymptotische efficiëntievan programma’s met deterministischgedrag. Gelijktijdigheid heeft alles te maken met het beheren van het onhandelbare: gebeurtenissen komen om redenen buiten onze controle, en we moeten erop reageren. Een gebruiker klikt met een muis, de windowmanager moet reageren, ook al vraagt het scherm om aandacht. Dergelijke situaties zijn inherent niet-deterministisch, maar we passen ook pro formaniet-determinisme toe in een deterministische setting door te doen alsof componenten gebeurtenissen in een willekeurige volgorde signaleren, en dat we erop moeten reageren zodra ze zich voordoen. Niet-deterministische compositie is een krachtig programma-structurerend idee. Parallellisme daarentegen heeft alles te maken met afhankelijkheden tussen de subberekeningen van een deterministische berekening. Het resultaat staat buiten kijf, maar er zijn veel manieren om dit te bereiken, de ene efficiënter dan de andere. We willen die kansen in ons voordeel benutten.

Het kunnen soorten orthogonale eigenschappen zijn in programma’s. Lees deze blogpostvoor aanvullende illustraties. En dezebesprak iets meer over het verschil over componenten in programmeren, zoals threads.

Houd er rekening mee dat threading of multitasking allemaal implementaties van computing zijn die meer concrete doelen dienen. Ze kunnen verband houden met parallellisme en gelijktijdigheid, maar niet op een essentiële manier. Het zijn dus nauwelijks goede inzendingen om de uitleg te beginnen.

Nog een hoogtepunt: (fysieke) “tijd” heeft bijna niets te maken met de eigenschappen die hier worden besproken. Tijd is slechts een manier om de meting uit te voeren om de betekenis van de eigenschappen te laten zien, maar verre van de essentie. Denk twee keer na over de rol van “tijd” in tijdcomplexiteit– die min of meer vergelijkbaar is, zelfs de meting is in dat geval vaak belangrijker.


Antwoord 27

‘Concurrent’ is dingen – alles – tegelijkertijd doen. Het kunnen verschillende dingen zijn, of hetzelfde. Ondanks het geaccepteerde antwoord, dat ontbreekt, gaat het niet om “tegelijkertijd lijken te zijn”. Het is echt tegelijk. U hebt meerdere CPU-cores nodig, ofwel met gedeeld geheugen binnen één host, ofwel met gedistribueerd geheugen op verschillende hosts, om gelijktijdige code uit te voeren. Pijplijnen van 3 verschillende taken die tegelijkertijd worden uitgevoerd, zijn een voorbeeld: taakniveau-2 moet wachten op eenheden die zijn voltooid door taakniveau-1 en taakniveau-3 moet wachten op eenheden die zijn voltooid door taakniveau-2. Een ander voorbeeld is samenloop van 1-producent met 1-consument; of veel-producenten en 1-consument; lezers en schrijvers; et al.

‘Parallel’ is dezelfde dingen tegelijkertijd doen. Het is gelijktijdig, maar bovendien is het hetzelfde gedrag dat tegelijkertijd plaatsvindt, en meestal op verschillende gegevens. Matrixalgebra kan vaak worden geparallelliseerd, omdat dezelfde bewerking herhaaldelijk wordt uitgevoerd: de kolomsommen van een matrix kunnen bijvoorbeeld allemaal tegelijkertijd worden berekend met hetzelfde gedrag (som) maar op verschillende kolommen. Het is een gebruikelijke strategie om de kolommen te partitioneren (op te splitsen) over beschikbare processorcores, zodat u bijna dezelfde hoeveelheid werk (aantal kolommen) hebt dat door elke processorcore wordt afgehandeld. Een andere manier om het werk op te splitsen is een zak met taken waarbij de werknemers die hun werk afmaken teruggaan naar een manager die het werk uitdeelt en dynamisch meer werk krijgt totdat alles klaar is. Ticketing-algoritme is een ander.

Niet alleen numerieke code kan worden geparallelliseerd. Bestanden kunnen te vaak parallel worden verwerkt. In een toepassing voor natuurlijke taalverwerking moet u voor elk van de miljoenen documentbestanden mogelijk het aantal tokens in het document tellen. Dit is parallel, omdat je tokens telt, wat hetzelfde gedrag is, voor elk bestand.

Met andere woorden, parallellisme is wanneer hetzelfde gedrag gelijktijdig wordt uitgevoerd. Gelijktijdig betekent tegelijkertijd, maar niet noodzakelijk hetzelfde gedrag. Parallel is een bepaald soort gelijktijdigheid waarbij hetzelfde gebeurt op hetzelfde moment.

Termen omvatten bijvoorbeeld atomaire instructies, kritieke secties, wederzijdse uitsluiting, spin-wachten, semaforen, monitors, barrières, het doorgeven van berichten, kaartverkleinen, hartslag, ring, ticketingalgoritmen, threads, MPI, OpenMP.

Het werk van Gregory Andrews is er een uitstekend leerboek over: Multithreaded, Parallel, and Distributed Programming.


Antwoord 28

Parallelisme:
Meerdere threads hebben een vergelijkbare taak die onafhankelijk is van elkaar in termen van gegevens en middelen die ze daarvoor nodig hebben. Bijv.: Google-crawler kan duizenden threads voortbrengen en elke thread kan zijn taak onafhankelijk uitvoeren.

Gelijktijdigheid:
Gelijktijdigheid komt in beeld wanneer u gedeelde gegevens hebt, gedeelde bronnen tussen de threads. In een transactiesysteem betekent dit dat u het kritieke deel van de code moet synchroniseren met behulp van enkele technieken zoals sloten, semaforen, enz.


Antwoord 29

Uitleg van deze bronwas nuttig voor mij:

Gelijktijdigheid is gerelateerd aan hoe een toepassing meerdere taken afhandelt
werkt aan. Een aanvraag kan één taak tegelijk verwerken
(opeenvolgend) of aan meerdere taken tegelijk werken
(gelijktijdig).

Parallisme daarentegen heeft te maken met hoe een applicatie
behandelt elke individuele taak. Een toepassing kan de taak verwerken
serieel van begin tot eind, of splits de taak op in subtaken die:
kan parallel worden ingevuld.

Zoals u kunt zien, kan een toepassing gelijktijdig zijn, maar niet parallel.
Dit betekent dat het meer dan één taak tegelijkertijd verwerkt, maar
de taken zijn niet onderverdeeld in subtaken.

Een toepassing kan ook parallel zijn, maar niet gelijktijdig. Dit betekent
dat de applicatie slechts aan één taak tegelijk werkt, en deze taak
wordt opgesplitst in subtaken die parallel kunnen worden verwerkt.

Bovendien kan een toepassing niet gelijktijdig of parallel zijn.
Dit betekent dat het aan slechts één taak tegelijk werkt, en de taak is:
nooit opgesplitst in subtaken voor parallelle uitvoering.

Ten slotte kan een toepassing ook gelijktijdig en parallel zijn, in
dat het zowel aan meerdere taken tegelijkertijd werkt, en ook pauzeert
elke taak in subtaken voor parallelle uitvoering. Echter, sommige van
de voordelen van gelijktijdigheid en parallellisme kunnen hierin verloren gaan
scenario, aangezien de CPU’s in de computer al redelijk bezig zijn
met ofwel concurrency of parallellisme alleen. Het combineren ervan kan leiden tot:
slechts een kleine prestatiewinst of zelfs prestatieverlies.

Other episodes