Redis 6 中的多线程实现方式比我预期的要差
大家好,我是飞哥!Redis 是一个高性能服务端的典范。它通过多路复用 epoll 来管理海量的用户连接,只使用一个线程来通过事件循环来处理所有用户请求,就可以达到每秒数万 QPS 的处理能力。下图是单线程版本 Redis 工作的核心原理图,详情参见。单线程的 Redis 虽然性能很高,但是却...
大家好,我是飞哥!Redis 是一个高性能服务端的典范。它通过多路复用 epoll 来管理海量的用户连接,只使用一个线程来通过事件循环来处理所有用户请求,就可以达到每秒数万 QPS 的处理能力。下图是单线程版本 Redis 工作的核心原理图,详情参见。单线程的 Redis 虽然性能很高,但是却...
大家好,我是飞哥!今天开篇先给大家讲个飞哥自己的小故事。我在学校和刚毕业头一年主要从事的客户端开发,那时候对服务器端编程还不擅长。有一次去面试服务器端岗位,面试官问我有一个连接过来,你该怎么编程处理它。我答道:“主线程收到请求后,创建一个子线程处理。” 面试官接着问,那如果有一千个连接同时来呢...
在 golang 中是如何对 epoll 进行封装的?在协程没有流行以前,传统的网络编程中,同步阻塞是性能低下的代名词,一次切换就得是 3 us左右的 CPU 开销。各种基于 epoll 的异步非阻塞的模型虽然提高了性能,但是基于回调函数的编程方式却非常不符合人的的直线思维模式。开发出来的代码...
大家好,我是飞哥! 今天给大家带来的是一个漫画故事!01大家好,我是一个进程,我的名字的小 P。 我和很多其它小伙伴一样,都由老大操作系统创建和管理。 要问我是怎么来的,嘘小点声,不能让那帮应用开发们听见。 其实就是内核的开发都认为应用开发是傻逼,怕应用开发的代码把服务器给搞坏。就设计...
进程在 Linux 上是一个开销不小的家伙,先不说创建,光是上下文切换一次就得几个微秒。所以为了高效地对海量用户提供服务,必须要让一个进程能同时处理很多个 tcp 连接才行。现在假设一个进程保持了 10000 条连接,那么如何发现哪条连接上有数据可读了、哪条连接可写了 ?我们当然可以采用循环遍...