To zależy od tego, jak zdefiniujesz współbieżność.
W oprogramowaniu po stronie serwera współbieżność i równoległość są często traktowane jako różne koncepcje. Na serwerze obsługa współbieżnych operacji we / wy oznacza, że serwer może obsługiwać kilku klientów, wykonując kilka przepływów odpowiadających tym klientom z tylko jedną jednostką obliczeniową. W tym kontekście równoległość oznaczałaby, że serwer jest w stanie wykonywać kilka rzeczy w tym samym czasie (z wieloma jednostkami obliczeniowymi), co jest różne.
Na przykład barman może opiekować się kilkoma klientami, a jednocześnie może przygotować tylko jeden napój. Więc może zapewnić współbieżność bez równoległości.
To pytanie zostało tutaj omówione:
Jaka jest różnica między współbieżnością a równoległością?
Zobacz także prezentację Roba Pike'a.
Program jednowątkowy z pewnością może zapewnić współbieżność na poziomie we / wy przy użyciu mechanizmu multipleksowania we / wy (de) i pętli zdarzeń (co robi Redis).
Równoległość ma swój koszt: z wieloma gniazdami / wieloma rdzeniami, które można znaleźć na nowoczesnym sprzęcie, synchronizacja między wątkami jest niezwykle kosztowna. Z drugiej strony wąskim gardłem wydajnego silnika pamięci masowej, takiego jak Redis, jest bardzo często sieć, na długo przed procesorem. Izolowane pętle zdarzeń (które nie wymagają synchronizacji) są zatem postrzegane jako dobry projekt do budowy wydajnych, skalowalnych serwerów.
Fakt, że operacje Redis są atomowe, jest po prostu konsekwencją jednowątkowej pętli zdarzeń. Ciekawostką jest to, że atomowość jest zapewniana bez dodatkowych kosztów (nie wymaga synchronizacji). Może być wykorzystany przez użytkownika do implementacji optymistycznego blokowania i innych wzorców bez płacenia za narzut synchronizacji.