tars服务端(二):网络io模型和线程模型

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

一.网络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  =
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值