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