Záleží na tom, jak definujete souběžnost.
V softwaru na straně serveru jsou souběžnost a paralelismus často považovány za různé koncepty. Na serveru podpora souběžných I/O znamená, že server je schopen obsluhovat několik klientů provedením několika toků odpovídajících těmto klientům pouze s jednou výpočetní jednotkou. V tomto kontextu by paralelismus znamenal, že server je schopen provádět několik věcí současně (s více výpočetními jednotkami), což je rozdíl.
Například barman se může postarat o několik zákazníků, zatímco může připravit pouze jeden nápoj najednou. Takže může poskytnout souběžnost bez paralelismu.
Tato otázka byla diskutována zde:Jaký je rozdíl mezi souběžností a paralelismem?
Podívejte se také na tuto prezentaci od Roba Pikea.
Jednovláknový program může rozhodně zajistit souběžnost na I/O úrovni pomocí I/O (de)multiplexního mechanismu a smyčky událostí (což dělá Redis).
Paralelnost něco stojí:s více zásuvkami/více jádry, které můžete najít na moderním hardwaru, je synchronizace mezi vlákny extrémně drahá. Na druhou stranu, úzkým hrdlem efektivního úložiště, jako je Redis, je velmi často síť, daleko před CPU. Izolované smyčky událostí (které nevyžadují žádnou synchronizaci) jsou proto považovány za dobrý návrh pro budování efektivních, škálovatelných serverů.
Skutečnost, že operace Redis jsou atomické, je jednoduše důsledkem jednovláknové smyčky událostí. Zajímavostí je, že atomicita je poskytována bez dalších nákladů (nevyžaduje synchronizaci). Uživatel jej může využít k implementaci optimistického zamykání a dalších vzorů, aniž by musel platit za režii synchronizace.