Redis的单线程模型存在以下主要缺点:
- I/O限制
Redis只有一个线程来处理网络I/O和磁盘I/O,受到I/O瓶颈限制。 - 处理性能受限
一个线程无法充分利用多核CPU,只能发挥单核性能。 - 错误恢复慢
当主线程出现错误时,整个进程需要重启,不灵活。 - 采样率低
统计信息无法准确反应实时负载,采样率较低。 - 扩展性差
单线程模型难以支持水平扩展。 - 多客户端争用问题
多个客户端并发访问时,可能出现争用现象。 - 调试困难
单线程上调试非常困难,串行化调试难度大。
总的来说,单线程模型的主要问题在于:
- 限制了 I/O 处理速度
- 无法充分利用多核cpu性能
- 错误恢复缓慢
- 统计信息采样率不高
- 扩展性差
- 客户端争用问题
- 调试困难
因此多线程或者多进程模型可以很好解决上述问题。但同时也会带来更复杂的并发处理、调度和同步等问题。Single thread + Embeded Meta Language可以是一个很好的折中方案。