Basiskennis van systeemontwerp voor backendontwikkelaars · Les

Gelijktijdigheid en parallellisme

Begrijp hoe u gelijktijdigheid en parallellisme kunt benutten om meerdere taken tegelijk uit te voeren en bronnen beter te gebruiken.

Les 2 van 411 stappen

Gelijktijdigheid en parallellisme is een gratis Basiskennis van systeemontwerp voor backendontwikkelaars-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Basiskennis van systeemontwerp voor backendontwikkelaars. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Basiskennis van systeemontwerp voor backendontwikkelaars bevat in totaal 4 lessen.

Systemen met meerdere taken

Is het je ooit opgevallen dat je computer tegelijkertijd muziek kan afspelen, bestanden kan downloaden en op het web kan browsen? Dat is geen magie, maar de kracht van multitasking!

Bij systeemontwerp moeten we onze applicaties vaak veel bewerkingen efficiënt laten uitvoeren. Hierbij worden de concepten concurrentie en parallellisme cruciaal.

Concurrentie begrijpen

Concurrentie gaat over het gelijktijdig afhandelen van veel zaken. Denk aan een chef-kok die meerdere kooktaken uitvoert in één keuken.

  • De chef kan groenten hakken, vervolgens in een pan roeren en daarna een oven controleren.
  • De chef doet niet alles tegelijkertijd, maar boekt vooruitgang bij verschillende taken door er snel tussen te wisselen.
  • Dit wekt de indruk dat de uitvoering gelijktijdig plaatsvindt.

Concurrentie in software

In software betekent concurrentie vaak dat één CPU-kern snel wisselt tussen verschillende taken of threads. Dit heet contextwisselen.

  • Eén taak wordt korte tijd uitgevoerd.
  • De CPU slaat de status ervan op en schakelt over naar een andere taak.
  • Dit gebeurt zo snel dat gebruikers het ervaren alsof taken "tegelijkertijd" worden uitgevoerd.

Dit verbetert de reactiesnelheid en zorgt ervoor dat een systeem voortgang kan boeken bij meerdere bewerkingen.

Demonstratie van gelijktijdige taken

Hier zie je een eenvoudig Java-voorbeeld waarin twee "taken" gelijktijdig worden uitgevoerd. De hoofdthread start twee nieuwe threads en het besturingssysteem of de JVM plant ze in om te worden uitgevoerd.

Let erop dat hun uitvoer door elkaar kan lopen. Dat laat zien dat ze voortgang boeken zonder dat de ene taak noodzakelijkerwijs klaar is voordat de andere begint.

public class ConcurrencyDemo {
  public static void main(String[] args) {
    Runnable task1 = () -> {
      for (int i = 0; i < 3; i++) {
        System.out.println("Task A: " + i);
        try { Thread.sleep(50); } catch (InterruptedException e) {}
      }
    };

    Runnable task2 = () -> {
      for (int i = 0; i < 3; i++) {
        System.out.println("Task B: " + i);
        try { Thread.sleep(50); } catch (InterruptedException e) {}
      }
    };

    new Thread(task1).start();
    new Thread(task2).start();
    System.out.println("Main thread done.");
  }
}

Echt parallellisme

Parallellisme gaat over het letterlijk tegelijkertijd uitvoeren van meerdere zaken. Stel je meerdere chef-koks voor, elk met een eigen keuken, die op exact hetzelfde moment aan verschillende gerechten werken.

  • Elke chef (of CPU-kern) voert onafhankelijk een taak uit.
  • Hiervoor zijn meerdere verwerkingseenheden nodig, zoals meerdere kernen in een CPU.
  • Het doel is de doorvoersnelheid te verhogen door meerdere instructies echt op hetzelfde moment uit te voeren.

Parallellisme in actie

Voor echt parallellisme heeft je systeem meerdere verwerkingseenheden nodig. Moderne CPU's hebben meerdere kernen, waardoor meerdere threads gelijktijdig kunnen worden uitgevoerd.

Als je het vorige Java-voorbeeld uitvoert op een processor met meerdere kernen, kan het besturingssysteem Task A op de ene kern en Task B op een andere kern inplannen, waardoor ze daadwerkelijk gelijktijdig worden uitgevoerd.

Dit verschilt van concurrentie op één kern, waarbij gelijktijdige uitvoering wordt gesimuleerd door snel te wisselen.

Concurrentie versus parallellisme

Laten we het belangrijkste verschil verduidelijken:

  • Concurrentie: Verwerkt veel taken tegelijk, vaak door ertussen te wisselen (bijvoorbeeld één CPU-kern die meerdere threads afhandelt).
  • Parallellisme: Voert veel taken letterlijk tegelijkertijd uit (bijvoorbeeld meerdere CPU-kernen die elk een thread afhandelen).

Een systeem kan concurrent zijn zonder parallel te zijn (een CPU met één kern). Een parallel systeem is altijd concurrent (het verwerkt meerdere taken).

Systeemprestaties verbeteren

Zowel concurrentie als parallellisme zijn essentieel voor krachtige systemen:

  • Verbeterde reactiesnelheid: Concurrente systemen kunnen de gebruikersinterface actief houden terwijl achtergrondtaken worden uitgevoerd.
  • Hogere doorvoersnelheid: Parallelle systemen kunnen binnen een bepaalde tijd meer aanvragen of gegevens verwerken doordat ze alle beschikbare CPU-capaciteit benutten.
  • Beter gebruik van bronnen: Ze benutten CPU-kernen efficiënt, vooral op servers die veel clientverbindingen afhandelen.

Complexiteit beheren

Hoewel concurrentie en parallellisme krachtig zijn, brengen ze ook uitdagingen met zich mee:

  • Racecondities: Wanneer meerdere threads toegang hebben tot gedeelde bronnen, hangt de uiteindelijke uitkomst af van de volgorde waarin ze worden uitgevoerd. Dit kan onvoorspelbare resultaten veroorzaken.
  • Deadlocks: Twee of meer threads raken geblokkeerd doordat ze op elkaar wachten om bronnen vrij te geven, waardoor het systeem stopt.
  • Complexiteit: Het ontwerpen en debuggen van concurrente of parallelle systemen is moeilijker door niet-deterministisch gedrag.

Zorgvuldige synchronisatie en ontwerppatronen zijn nodig om deze problemen te beperken.

Controle: concurrentie versus parallellisme

Denk aan een webserver op een CPU met één kern die meerdere clientaanvragen afhandelt door er snel tussen te wisselen. Welke van de volgende beschrijvingen past het beste bij dit scenario?

Samenvatting: concurrentie en parallellisme

We hebben concurrentie verkend: daarbij beheer je meerdere taken door ertussen te wisselen. Bij parallelisme worden meerdere taken echt gelijktijdig uitgevoerd met behulp van meerdere verwerkingseenheden.

Beide zijn essentieel voor het ontwerpen van krachtige, responsieve en schaalbare backendsystemen. Ze brengen wel complexiteit met zich mee, zoals racecondities en deadlocks, die zorgvuldig moeten worden afgehandeld.

Gratis beginnen

Leer Basiskennis van systeemontwerp voor backendontwikkelaars met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
12
Lessen
48

Veelgestelde vragen

Is de les “Gelijktijdigheid en parallellisme” gratis?

Ja — de volledige tekst van “Gelijktijdigheid en parallellisme” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Basiskennis van systeemontwerp voor backendontwikkelaars wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Basiskennis van systeemontwerp voor backendontwikkelaars bevat in totaal 4 lessen.

Wat leer ik in “Gelijktijdigheid en parallellisme”?

Begrijp hoe u gelijktijdigheid en parallellisme kunt benutten om meerdere taken tegelijk uit te voeren en bronnen beter te gebruiken. Je oefent met Basiskennis van systeemontwerp voor backendontwikkelaars door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Basiskennis van systeemontwerp voor backendontwikkelaars te beginnen?

Ervaring vooraf is niet nodig. Basiskennis van systeemontwerp voor backendontwikkelaars op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “Gelijktijdigheid en parallellisme”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Basiskennis van systeemontwerp voor backendontwikkelaars?

Ja. Elke les over Basiskennis van systeemontwerp voor backendontwikkelaars bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Optimalisatie van latency en throughput
  2. Gelijktijdigheid en parallellisme
  3. Prestatietesten en profiling
  4. Databaseconnectionpooling
← Terug naar Basiskennis van systeemontwerp voor backendontwikkelaars