Ну, это зависит от того, как вы определяете параллелизм.
В программном обеспечении на стороне сервера параллелизм и параллелизм часто рассматриваются как разные понятия. На сервере поддержка одновременных операций ввода-вывода означает, что сервер может обслуживать несколько клиентов, выполняя несколько потоков, соответствующих этим клиентам только с одним вычислительным модулем. В этом контексте параллелизм будет означать, что сервер способен выполнять несколько вещей одновременно (с несколькими вычислительными блоками), что отличается.
Например, бармен может присматривать за несколькими клиентами, в то время как он может готовить только один напиток за раз. Таким образом, он может обеспечить параллелизм без параллелизма.
Этот вопрос обсуждался здесь: в
чем разница между параллелизмом и параллелизмом?
Смотрите также эту презентацию от Роба Пайка.
Однопоточная программа может определенно обеспечить параллелизм на уровне ввода / вывода, используя механизм мультиплексирования ввода / вывода и цикл обработки событий (что и делает Redis).
Параллелизм имеет свою стоимость: благодаря наличию нескольких сокетов / нескольких ядер на современном оборудовании синхронизация между потоками чрезвычайно дорога. С другой стороны, узким местом эффективного механизма хранения, такого как Redis, очень часто является сеть, задолго до ЦП. Поэтому изолированные циклы событий (которые не требуют синхронизации) рассматриваются как хороший проект для создания эффективных, масштабируемых серверов.
Тот факт, что операции Redis являются атомарными, является просто следствием однопоточного цикла событий. Интересным моментом является то, что атомарность предоставляется без дополнительной оплаты (не требует синхронизации). Пользователь может использовать его для реализации оптимистической блокировки и других шаблонов, не оплачивая затраты на синхронизацию.