为什么不采用多进程或多线程处理?
单线程处理的缺点?
Redis 不存在线程安全问题?
Redis 采用了线程封闭的方式,把任务封闭在一个线程,自然避免了线程安全问题,不过对于需要依赖多个 redis 操作的复合操作来说,依然需要锁,而且有可能是分布式锁
什么是多路 I/O 复用(Epoll)
网络 IO 都是通过 Socket 实现,Server 在某一个端口持续监听,客户端通过 Socket(IP+Port)与服务器建立连接(ServerSocket.accept),成功建立连接之后,就可以使用 Socket 中封装的 InputStream 和 OutputStream 进行 IO 交互了。针对每个客户端,Server 都会创建一个新线程专门用于处理
默认情况下,网络 IO 是阻塞模式,即服务器线程在数据到来之前处于【阻塞】状态,等到数据到达,会自动唤醒服务器线程,着手进行处理。阻塞模式下,一个线程只能处理一个流的 IO 事件
为了提升服务器线程处理效率,有以下三种思路
其它开源软件采用的模型