Det kan så vara, att det är enklare i algoritmer men tror inte heller det är speciellt svårt i andra språk
Om jag beskriver en normal servermjukvara som skall hantera exempelvis frontend för massa användare-
Säkerhet
Databasen (här har databaser själva löst problemet, finns gott om tekniker för att skala databaskopplingar)
Cacha data
Antal endpoints
Specialfunktioner (här är allt som är special för specifikt system)
Om en server är stateless måste i princip alla ovanstående delar lösas utanför servern förutom endpoints (serverns körbara metoder ). Det blir snabbt en stor röra om man går utanför databas och säkehet då just databashantering och säkerhet är så vanligt så där brukar det finnas färdiga ramverk och följa. Så fort projekt går utanför ramverken är risken extremt stor för kollaps, utvecklare är inte tränade i att skriva sådant samt att ramverken i sig blir en börda (teknisk skuld).
En server som kan hantera state kan hantera säkerhet internt, databasen körs likartat med stateless servrar men saker som cache vilket kan minska ner databasanrop drastiskt, antal endpoints kan minskas och alla specialare blir så mycket enklare.
Men varje del måste hanteras så att det kan skala och vad det oftast då handlar om är att man minimerar logik för att skriva data som flera har tillgång till. All sådan kod är extremt optimerad för att undvika låsningar
Blandar du inte ihop "concurrency" och "parallellism" nu?
Parallellism är inte speciellt vida utbrett i servers då dessa generellt sett är främst I/O-begränsade.
Concurrency: hantera flera saker potentiellt överlappande, kan göras även om man bara har en CPU-tråd!!!
Parallellism: köra flera saker samtidigt, kräver multipla CPU-trådar.
De flesta språk har stöd för båda. Men ser vi idag också specialisering där Go är ett exempel på något som är riktigt bra på "concurrency", det stödjer också parallellism men det är inte fokus och effektiviteten är inte superbra.
Rust har vi t.ex. Rayon väldigt bra stöd för "parallellism". Det har också stöd för "concurrency" via t.ex. Tokio, men för egen del föredrar jag absolut Go över Rust för just "concurrency".
I standard C++ stöds "parallellism" via saker som execution policies. Concurrency stöds via coroutines. Trådar, så som definierad av POSIX-threads, är tyvärr en rätt illa designad abstraktion då det blandar ihop dessa två koncept helt och hållet (vilket inte kan beskyllas på inkompetens utan mer en konsekvens av dess ålder, initialt var det främst "concurrency" då multicore CPUer var väldigt ovanligt då).
Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer