Gelijktijdige instructie verwijst naar het vermogen van een computersysteem om meerdere instructies tegelijkertijd uit te voeren, of in ieder geval de schijn te wekken dat te doen. Het is een breder concept dan parallellisme, hoewel het vaak door elkaar wordt gebruikt. Het belangrijkste verschil ligt in de manier waarop met de instructies wordt omgegaan:
* Parallelisme: Voert expliciet meerdere instructies *gelijktijdig* uit met behulp van meerdere verwerkingseenheden (zoals meerdere kernen in een CPU). Hiervoor zijn speciale hardwarebronnen vereist.
* Gelijktijdigheid: Behandelt de uitvoering van meerdere instructies die *overlappen* in de tijd, maar niet noodzakelijkerwijs op exact hetzelfde moment. Dit kan worden bereikt door middel van verschillende technieken, waaronder:
* Multitasken: Meerdere programma's schijnbaar tegelijkertijd uitvoeren door snel tussen de programma's te schakelen. De daadwerkelijke verwerking vindt nog steeds sequentieel plaats, maar het schakelen is snel genoeg om de illusie van gelijktijdigheid te wekken.
* Multithreading: Eén enkel programma dat meerdere instructiesthreads tegelijkertijd uitvoert. Deze threads kunnen bronnen delen, en een enkele kern kan snel tussen deze threads schakelen (contextwisseling).
* Pallellisme op instructieniveau (ILP): De CPU herschikt en voert meerdere instructies tegelijkertijd uit binnen één kern, waarbij gebruik wordt gemaakt van pipelining en andere technieken om de prestaties te verbeteren. Dit gebeurt op een veel lager niveau dan multitasking of multithreading.
* SIMD (enkele instructie, meerdere gegevens): Een enkele instructie werkt tegelijkertijd op meerdere datapunten, vaak gebruikt bij vectorverwerking en GPU-berekeningen.
In wezen is gelijktijdigheid een meer omvattende term. Parallellisme is een *type* gelijktijdigheid waarbij de instructies gelijktijdig op afzonderlijke hardware-eenheden worden uitgevoerd. Gelijktijdigheid kan ook worden bereikt zonder echt parallellisme, alleen door slim plannen en middelenbeheer. Het doel van beide is om de algehele systeemprestaties en doorvoer te verbeteren door verschillende delen van een programma of meerdere programma's te overlappen of gelijktijdig uit te voeren. |