不一定,
比如Redis就是单线程的,但它却非常高效,基本操作都能达到十万量级/s。从线程这个角度来看,部分原因在于:
1.多线程带来线程上下文切换开销,单线程就没有这种开销;
2.采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;
3.使用多路I/O复用模型,非阻塞IO;一个线程监控多个socket。这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。
4.数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;其中常见的数据结构类型有:String、List、Set、Hash、Sorted Set或者是ZSet这5种。
当然“Redis很快”更本质的原因在于:
Redis基本都是内存操作,这种情况下单线程可以很高效地利用CPU。而多线程适用场景一般是:存在相当比例的IO和网络操作。