请问 redis 中单线程的问题

2018-11-18 15:22:33 +08:00
 cc959798

都知道 redis 是单工作进程的,命令是一条条的执行的,但是 redis 又是实现 io 多路复用的,比如 epoll,感觉这个有点矛盾呀,命令一条条执行就可以了,执行完毕后就下一条,io 多路复用的意义是什么,又不会开多个线程去处理

1378 次点击
所在节点    问与答
5 条回复
catror
2018-11-18 15:36:09 +08:00
因为实际上的 IO 收发是内核在干活,你一条条去执行的话,需要阻塞等待。
misaka19000
2018-11-18 15:40:34 +08:00
IO 多路复用的目的是管理多个 TCP 连接,和任务的执行没关系

如果不用多路复用,就需要使用线程来管理多个连接,而操作系统线程数过多会导致性能问题;使用多路复用可以保证在使用极少的线程的情况下维护上万个连接
antipro
2018-11-18 15:47:01 +08:00
因为这些线程不是 redis 的
watzds
2018-11-18 17:34:52 +08:00
不这样,一个线程一直等网络连接,不用干活了
msg7086
2018-11-19 05:08:39 +08:00
因为 I/O 很慢。一条条执行那不得等死了?又不是只有开多线程才会同时执行任务。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/508961

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX