De gelijktijdige groei van de beschikbaarheid van big data en van het aantal gelijktijdige gebruikers van het internet legt een bijzondere druk op de noodzaak om computertaken “parallel”, of gelijktijdig, uit te voeren. Parallel en gedistribueerd computergebruik komt voor in veel verschillende themagebieden van de computerwetenschap, waaronder algoritmen, computerarchitectuur, netwerken, besturingssystemen en software engineering. In het begin van de 21e eeuw was er een explosieve groei in multiprocessorontwerp en andere strategieën om complexe toepassingen sneller te laten verlopen. Parallel en gedistribueerd computergebruik bouwt voort op fundamentele systeemconcepten, zoals gelijktijdigheid, wederzijdse uitsluiting, consistentie in staat/geheugen manipulatie, message-passing, en gedeelde-geheugen modellen.
Het maken van een multiprocessor uit een aantal enkele CPU’s vereist fysieke verbindingen en een mechanisme voor communicatie tussen de processoren, zodat ze parallel kunnen werken. Strak gekoppelde multiprocessoren delen geheugen en kunnen dus communiceren door informatie op te slaan in geheugen dat voor alle processoren toegankelijk is. Losjes gekoppelde multiprocessoren, met inbegrip van computernetwerken, communiceren door berichten naar elkaar te zenden via de fysieke verbindingen. Computerwetenschappers hebben verschillende multiprocessor-architecturen onderzocht. Zo worden de mogelijke configuraties waarin honderden of zelfs duizenden processoren aan elkaar kunnen worden gekoppeld, onderzocht om de geometrie te vinden die de meest efficiënte systeemdoorvoer ondersteunt. Een veel bestudeerde topologie is de hyperkubus, waarin elke processor rechtstreeks verbonden is met een vast aantal buren: twee voor het tweedimensionale vierkant, drie voor de driedimensionale kubus, en evenzo voor de hoger dimensionale hyperkubussen. Computerwetenschappers onderzoeken ook methoden om berekeningen uit te voeren op dergelijke multiprocessormachines (b.v. algoritmen om optimaal gebruik te maken van de architectuur en technieken om conflicten bij de gegevensoverdracht te vermijden). De software die het gebruik van een bepaalde machine mogelijk maakt, met name het besturingssysteem, maakt integraal deel uit van dit onderzoek.
Concurrency heeft betrekking op de uitvoering van meer dan één procedure tegelijk (eventueel met toegang tot gedeelde gegevens), hetzij werkelijk gelijktijdig (zoals op een multiprocessor), hetzij in een onvoorspelbare, in elkaar overlopende volgorde. Moderne programmeertalen zoals Java bevatten zowel inkapseling als functies die “threads” worden genoemd, waarmee de programmeur de synchronisatie tussen gelijktijdige procedures of taken kan definiëren.
Twee belangrijke problemen bij concurrency control staan bekend als deadlocks en race conditions. Een deadlock treedt op wanneer een bron die voor onbepaalde tijd door een proces wordt vastgehouden, door twee of meer andere processen tegelijk wordt opgevraagd. Als gevolg daarvan kan geen van de processen die de bron opvragen doorgaan; ze zitten in een impasse, wachtend tot de bron wordt vrijgemaakt. Een besturingssysteem kan deze situatie het hoofd bieden met verschillende technieken voor preventie of detectie en herstel. Een “race condition” doet zich daarentegen voor wanneer twee of meer gelijktijdige processen een variabele een verschillende waarde toekennen, en het resultaat afhangt van welk proces de variabele als eerste (of laatste) toewijst.
Het voorkomen van deadlocks en “race conditions” is van fundamenteel belang, omdat het de integriteit van de onderliggende applicatie waarborgt. Een algemene preventiestrategie wordt processynchronisatie genoemd. Synchronisatie vereist dat een proces wacht tot een ander proces een bepaalde bewerking heeft voltooid alvorens verder te gaan. Bijvoorbeeld, een proces (een schrijver) schrijft gegevens naar een bepaald gebied in het werkgeheugen, terwijl een ander proces (een lezer) gegevens uit dat gebied wil lezen. De lezer en de schrijver moeten gesynchroniseerd zijn zodat de schrijver geen bestaande data overschrijft totdat de lezer deze verwerkt heeft. Evenzo zou de lezer niet moeten beginnen met lezen voordat er gegevens in het gebied zijn geschreven.
Met de komst van netwerken werd gedistribueerd rekenen haalbaar. Een gedistribueerde berekening is een berekening die wordt uitgevoerd door een groep aan elkaar gekoppelde computers die samenwerken. Voor dergelijke berekeningen is gewoonlijk een gedistribueerd besturingssysteem nodig om de gedistribueerde bronnen te beheren. Belangrijke aandachtspunten zijn het verdelen van de werklast, waarbij wordt geprobeerd gebruik te maken van de toegang tot meerdere computers om taken sneller te voltooien; taakmigratie, die het verdelen van de werklast ondersteunt door taken efficiënt over machines te verdelen; en automatische taakreplicatie, die op verschillende locaties plaatsvindt voor een grotere betrouwbaarheid.