都知道 redis 是单工作进程的,命令是一条条的执行的,但是 redis 又是实现 io 多路复用的,比如 epoll,感觉这个有点矛盾呀,命令一条条执行就可以了,执行完毕后就下一条,io 多路复用的意义是什么,又不会开多个线程去处理
1
catror 2018-11-18 15:36:09 +08:00 via Android
因为实际上的 IO 收发是内核在干活,你一条条去执行的话,需要阻塞等待。
|
2
misaka19000 2018-11-18 15:40:34 +08:00
IO 多路复用的目的是管理多个 TCP 连接,和任务的执行没关系
如果不用多路复用,就需要使用线程来管理多个连接,而操作系统线程数过多会导致性能问题;使用多路复用可以保证在使用极少的线程的情况下维护上万个连接 |
3
antipro 2018-11-18 15:47:01 +08:00 via Android
因为这些线程不是 redis 的
|
4
watzds 2018-11-18 17:34:52 +08:00 via Android
不这样,一个线程一直等网络连接,不用干活了
|
5
msg7086 2018-11-19 05:08:39 +08:00
因为 I/O 很慢。一条条执行那不得等死了?又不是只有开多线程才会同时执行任务。
|