好吧,这取决于您如何定义并发。
在服务器端软件中,并发性和并行性通常被视为不同的概念。在服务器中,支持并发I / O意味着服务器能够通过仅使用一个计算单元执行与那些客户端相对应的多个流来为多个客户端提供服务。在这种情况下,并行性意味着服务器能够同时执行多个操作(使用多个计算单元),这是不同的。
例如,调酒师能够照顾几个顾客,而一次只能准备一种饮料。因此,他可以在没有并行的情况下提供并发。
通过使用I / O(解复用)机制和事件循环(Redis所做的事情),单线程程序肯定可以在I / O级别上提供并发性。
并行性是有代价的:由于您可以在现代硬件上找到多个插槽/多个内核,因此线程之间的同步非常昂贵。另一方面,像Redis这样的高效存储引擎的瓶颈通常是网络,远早于cpu。因此,孤立的事件循环(不需要同步)被视为构建高效,可伸缩服务器的良好设计。
Redis操作是原子的这一事实完全是单线程事件循环的结果。有趣的一点是原子性是免费提供的(不需要同步)。用户可以利用它来实现乐观锁定和其他模式,而无需支付同步开销。