Samtidighed og parallelisme
Forstå, hvordan De kan udnytte samtidighed og parallelisme til at udføre flere opgaver samtidig og udnytte ressourcerne bedre.
Samtidighed og parallelisme er en gratis Grundlæggende systemdesign for backendudviklere-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Grundlæggende systemdesign for backendudviklere, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Grundlæggende systemdesign for backendudviklere-kurset indeholder 4 lektioner i alt.
Systemer med flere opgaver
Har du nogensinde lagt mærke til, hvordan din computer kan afspille musik, downloade filer og surfe på nettet på samme tid? Det er ikke magi, men kraften i multitasking!
I systemdesign har vi ofte brug for, at vores applikationer håndterer mange operationer effektivt. Her bliver begreberne samtidighed og parallelitet afgørende.
Forstå samtidighed
Samtidighed handler om at håndtere mange ting på én gang. Forestil dig en kok, der jonglerer med flere madlavningsopgaver i et enkelt køkken.
- Kokken hakker måske grøntsager, rører i en gryde og tjekker derefter en ovn.
- Kokken gør ikke alt samtidigt, men gør fremskridt med flere opgaver ved hurtigt at skifte mellem dem.
- Det skaber en illusion af samtidig udførelse.
Samtidighed i software
I software betyder samtidighed ofte, at en enkelt CPU-kerne hurtigt skifter mellem forskellige opgaver eller tråde. Det kaldes kontekstskift.
- Én opgave kører i kort tid.
- CPU'en gemmer dens tilstand og skifter til en anden opgave.
- Det sker så hurtigt, at brugerne oplever, at opgaverne kører „samtidigt“.
Det forbedrer reaktionsevnen og gør det muligt for et system at gøre fremskridt med flere operationer.
Demonstration af samtidige opgaver
Her er et enkelt Java-eksempel, der viser to „opgaver“, som kører samtidigt. Hovedtråden starter to nye tråde, og operativsystemet eller JVM planlægger, hvornår de skal køre.
Bemærk, hvordan deres output kan blive flettet ind mellem hinanden. Det viser, at de gør fremskridt uden nødvendigvis at afslutte den ene, før den anden startes.
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.");
}
}Ægte parallelitet
Parallelitet handler om at gøre mange ting på én gang, bogstaveligt talt samtidigt. Forestil dig flere kokke, som hver har deres eget køkken og arbejder på forskellige retter på præcis samme tidspunkt.
- Hver kok (eller CPU-kerne) udfører en opgave uafhængigt.
- Det kræver flere behandlingsenheder (f.eks. flere kerner i en CPU).
- Det handler om at øge gennemløbet ved virkelig at udføre flere instruktioner på samme tidspunkt.
Parallelitet i praksis
Hvis du vil opnå ægte parallelitet, skal dit system have flere behandlingsenheder. Moderne CPU'er har flere kerner, så flere tråde kan køre samtidigt.
Hvis du kører det foregående Java-eksempel på en processor med flere kerner, kan operativsystemet planlægge Task A på én kerne og Task B på en anden, hvilket fører til faktisk samtidig udførelse.
Det adskiller sig fra samtidighed på en enkelt kerne, som simulerer samtidig udførelse gennem hurtige skift.
Samtidighed og parallelitet
Lad os tydeliggøre den vigtigste forskel:
- Samtidighed: Håndterer mange opgaver på én gang, ofte ved at skifte mellem dem. (F.eks. en CPU-kerne, der håndterer flere tråde).
- Parallelitet: Udfører mange opgaver på én gang, bogstaveligt talt samtidigt. (F.eks. flere CPU-kerner, der hver håndterer en tråd).
Et system kan være samtidigt uden at være parallelt (en enkeltkernet CPU). Et parallelt system er altid samtidigt, fordi det håndterer flere opgaver.
Forbedring af systemets ydeevne
Både samtidighed og parallelitet er afgørende for systemer med høj ydeevne:
- Forbedret reaktionsevne: Samtidige systemer kan holde brugergrænsefladen aktiv, mens baggrundsopgaver kører.
- Større gennemløb: Parallelle systemer kan behandle flere forespørgsler eller mere data på en given tid ved at udnytte al tilgængelig CPU-kraft.
- Bedre ressourceudnyttelse: De udnytter CPU-kerner effektivt, især på servere, der håndterer mange klientforbindelser.
Håndtering af kompleksiteten
Selvom samtidighed og parallelitet er effektive, medfører de udfordringer:
- Kapløbstilstande: Når flere tråde får adgang til delte ressourcer, afhænger det endelige resultat af rækkefølgen, de udføres i, hvilket kan føre til uforudsigelige resultater.
- Deadlocks: To eller flere tråde sidder fast og venter på, at hinanden frigiver ressourcer, så systemet standser.
- Kompleksitet: Det er vanskeligere at designe og fejlfinde samtidige eller parallelle systemer på grund af ikke-deterministisk adfærd.
Der er brug for omhyggelig synkronisering og designmønstre for at begrænse disse problemer.
Tjek af samtidighed og parallelitet
Forestil dig en webserver, der kører på en enkeltkernet CPU og håndterer flere klientforespørgsler ved hurtigt at skifte mellem dem. Hvilken af følgende beskrivelser passer bedst på dette scenarie?
Opsummering: Samtidighed og parallelitet
Vi har udforsket concurrency, som handler om at håndtere flere opgaver ved at skifte mellem dem, og parallelism, som handler om at udføre flere opgaver reelt samtidigt ved hjælp af flere behandlingsenheder.
Begge dele er grundlæggende, når du designer backend-systemer med høj ydeevne, hurtig respons og god skalerbarhed, men de medfører også kompleksitet som race conditions og deadlocks, der kræver omhyggelig håndtering.
Lær Grundlæggende systemdesign for backendudviklere med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Samtidighed og parallelisme” gratis?
Ja — hele teksten til “Samtidighed og parallelisme” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Grundlæggende systemdesign for backendudviklere-kurset, skal du opgradere til CoddyKit PRO. Grundlæggende systemdesign for backendudviklere-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Samtidighed og parallelisme”?
Forstå, hvordan De kan udnytte samtidighed og parallelisme til at udføre flere opgaver samtidig og udnytte ressourcerne bedre. Du øver dig i Grundlæggende systemdesign for backendudviklere med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Grundlæggende systemdesign for backendudviklere?
Der kræves ingen tidligere erfaring. Grundlæggende systemdesign for backendudviklere på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Samtidighed og parallelisme”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Grundlæggende systemdesign for backendudviklere-lektion?
Ja. Alle Grundlæggende systemdesign for backendudviklere-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Optimering af latenstid og throughput
- Samtidighed og parallelisme
- Ydelsestest og profiling
- Connection pooling til databaser