Ну, це залежить від того, як ви визначаєте одночасність.
У серверному програмному забезпеченні паралельність і паралелізм часто розглядаються як різні поняття. На сервері, що підтримує паралельні введення / виведення, означає, що сервер здатний обслуговувати декілька клієнтів, виконуючи кілька потоків, відповідних цим клієнтам, лише з однією обчислювальною одиницею. У цьому контексті паралелізм означав би, що сервер здатний виконувати кілька речей одночасно (з декількома одиницями обчислень), що відрізняється.
Наприклад, бармен здатний доглядати за кількома клієнтами, в той час як він може готувати лише один напій за один раз. Тож він може забезпечити паралельність без паралелізму.
Це питання було обговорено тут:
Чим відрізняється паралельність і паралелізм?
Дивіться також цю презентацію від Rob Pike.
Однопотокова програма напевно може забезпечити паралельність на рівні вводу / виводу за допомогою механізму мультиплексування вводу / виводу (de) та циклу подій (що робить Redis).
Паралелізм коштує: за допомогою декількох розеток / декількох ядер, які можна знайти на сучасному обладнанні, синхронізація між потоками надзвичайно дорога. З іншого боку, вузьке місце такого ефективного накопичувача, як Redis, дуже часто є мережею, задовго до процесора. Тому окремі цикли подій (які не потребують синхронізації) розглядаються як хороша конструкція для створення ефективних, масштабованих серверів.
Те, що операції Redis є атомними, є просто наслідком однопотокового циклу подій. Цікавий момент - атомність надається без додаткових витрат (вона не потребує синхронізації). Користувач може використовувати його для реалізації оптимістичних блокувань та інших шаблонів, не платячи за синхронізацію.