Yah itu tergantung pada bagaimana Anda mendefinisikan konkurensi.
Dalam perangkat lunak sisi server, konkurensi dan paralelisme sering dianggap sebagai konsep yang berbeda. Dalam server, mendukung I / Os konkuren berarti server dapat melayani beberapa klien dengan mengeksekusi beberapa aliran yang sesuai dengan klien tersebut dengan hanya satu unit perhitungan. Dalam konteks ini, paralelisme akan berarti server mampu melakukan beberapa hal pada saat yang sama (dengan beberapa unit komputasi), yang berbeda.
Misalnya seorang bartender dapat menjaga beberapa pelanggan sementara dia hanya dapat menyiapkan satu minuman sekaligus. Jadi dia bisa memberikan konkurensi tanpa paralelisme.
Pertanyaan ini telah diperdebatkan di sini:
Apa perbedaan antara konkurensi dan paralelisme?
Lihat juga presentasi ini dari Rob Pike.
Program single-threaded pasti dapat memberikan konkurensi pada tingkat I / O dengan menggunakan mekanisme multiplexing I / O dan loop peristiwa (yang dilakukan Redis).
Paralelisme memiliki biaya: dengan beberapa soket / beberapa inti yang dapat Anda temukan pada perangkat keras modern, sinkronisasi antar utas sangat mahal. Di sisi lain, hambatan mesin penyimpanan yang efisien seperti Redis sangat sering pada jaringan, jauh sebelum CPU. Oleh karena itu, loop acara yang terisolasi (yang tidak memerlukan sinkronisasi) dipandang sebagai desain yang baik untuk membangun server yang efisien, terukur.
Fakta bahwa operasi Redis adalah atom hanyalah konsekuensi dari loop peristiwa single-threaded. Yang menarik adalah atomicity disediakan tanpa biaya tambahan (tidak memerlukan sinkronisasi). Ini dapat dieksploitasi oleh pengguna untuk menerapkan penguncian optimis dan pola lainnya tanpa membayar biaya sinkronisasi.