一.网络io模型
tars服务端的网络io模型是用epoll(边缘触发)做io多路复用 + 非阻塞socket,即Reactor。
如果把线程也纳入考量,那么
- 有多个网络线程,每个网络线程都有自己的epoll实例,即每个网络线程一个Reactor
- 多线程与io:很关键的一点,每个socket fd的read,write,close都只由同一个网络线程操作;这样做的好处很明显,避免了很多竞争条件
- 由于每个fd只由一个网络线程处理,所以网络线程中不能出现耗时比较久的操作(例如长时间的阻塞),否则将阻塞该线程其他的fd事件
总结起来,每个网络线程都是一个基于epoll的循环:
另外,tars还将epoll监听的文件描述符划分为几种类型:
enum
{
ET_LISTEN = 1, //socket listening
ET_CLOSE = 2, //暂时没用

本文详细介绍了tars服务端的网络io模型,采用epoll边缘触发和非阻塞socket,确保每个socket的read,write,close由同一网络线程处理,避免竞争条件。此外,文章还探讨了线程模型,包括N个网络线程负责收发,M个业务线程进行处理,以及如何在多线程环境下协调io操作和数据发送流程。"
123242227,7378582,数据库架构实战:读写分离与分库分表,"['架构', '数据库', 'java', '开发语言']
最低0.47元/天 解锁文章
2624

被折叠的 条评论
为什么被折叠?



