当前位置: 首页 > wzjs >正文

网站建设服务费的税收分类做美团团购网站

网站建设服务费的税收分类,做美团团购网站,捡个校花做老婆是哪个网站的,全国做旅游开发的公司代码梳理 Thread创建与分配 event_channel回调函数 在muduo中,有三种类型的channel,包括 事件channel(event_channel) 这个就是普通的IO事件channel,当监听到Tcp连接有读、写、关闭、错误事件的时候,event_channel活跃accept_c…

代码梳理

Thread创建与分配

在这里插入图片描述

event_channel回调函数

在muduo中,有三种类型的channel,包括

  • 事件channel(event_channel) 这个就是普通的IO事件channel,当监听到Tcp连接有读、写、关闭、错误事件的时候,event_channel活跃
  • accept_channel,仅在MainLoop中定义,监听新的连接到来的channel,(执行相应的回调函数,将新的连接分配给subLoop)
  • 唤醒channel(wakeupChannel),用于唤醒当前eventLoop对应的线程,执行相应的功能

在这里插入图片描述

一致性哈希原理

一致性哈希分配实现原理图解

在这里插入图片描述

TcpConnection生命周期管理

TcpConnection类是muduo库最核心的类,唯一继承自enable_shared_from_this的类,唯一默认使用shared_ptr来管理的类。
这是因为其生命周期模糊,可能在连接断开的时候,还有其他地方持有它的引用,贸然delete会造成悬空指针。只有确保其他地方没有持有该对象引用的时候,才能安全地销毁对象。
一般来说,所有涉及TcpConnection的回调函数都应该设置shared_from_this。(理解为临时增加引用计数,保证在执行回调执行对象前不被销毁,调用完成后引用计数自动减1)
并且,TcpConnection使用tie专门绑定shared_from_this指针,可以确保channel在执行相应回调函数的时候,对应的TcpConnection不会被释放。

// 连接建立
void TcpConnection::connectEstablished()
{setState(kConnected);channel_->tie(shared_from_this());channel_->enableReading(); // 向poller注册channel的EPOLLIN读事件// 新连接建立 执行回调connectionCallback_(shared_from_this());
}

智能指针

	/*这里只能是弱智能指针,如果tie_是shared_ptr,那么channel就会强持有Tcpconnection;这样就会导致循环引用TcpConnetion--->>>channnel--->>>TcpConnetion最终造成对象无法释放,内存泄露*/std::weak_ptr<void> tie_;bool tied_;
void Channel::tie(const std::shared_ptr<void> &obj)
{tie_ = obj;tied_ = true;
}
void Channel::handleEvent(Timestamp receiveTime)
{if (tied_)//tied_为true,说明上层调用了需要绑定对象来“守护回调期间的生命周期”{   // 防止对象析构导致回调悬空(如 TcpConnection)std::shared_ptr<void> guard = tie_.lock(); // 临时提升为强智能指针。if (guard){handleEventWithGuard(receiveTime);}// 如果提升失败了 就不做任何处理 说明Channel的TcpConnection对象已经不存在了// 如果提升成功,引用计数-1}else//有些时候可以不用tie 来保证安全{handleEventWithGuard(receiveTime);}
}

唤醒机制

适用于eventLoop不在其对应的线程中执行的时候
在这里插入图片描述

void EventLoop::loop()
{looping_ = true;quit_ = false;LOG_INFO("EventLoop %p start looping\n", this);while (!quit_){activeChannels_.clear();pollRetureTime_ = poller_->poll(kPollTimeMs, &activeChannels_);//Poller将发生事件的channel添加到activeChannels_中//可能是wakeupChannel_,eventChannel_,acceptorChannel_for (Channel *channel : activeChannels_){//调用对应channel的回调函数执行回调//这是 poller->poll() 返回后,系统检测到某个 fd(比如 socket)可读、可写、出错,就会调用这个函数//处理 IO 事件(来自内核 epoll)channel->handleEvent(pollRetureTime_);}//处理其他线程投递过来的任务(非 IO 事件)//来自runInLoop() ,跨线程调用doPendingFunctors();}LOG_INFO("EventLoop %p stop looping.\n", this);looping_ = false;
}

异步执行机制


文章转载自:

http://MI76SIYV.mcfjq.cn
http://SUgWe4ZC.mcfjq.cn
http://X2w06CSf.mcfjq.cn
http://ldL7SohS.mcfjq.cn
http://wsi9R7wP.mcfjq.cn
http://IGUt5IGs.mcfjq.cn
http://BdrEczLn.mcfjq.cn
http://qDLcHXxn.mcfjq.cn
http://DFTOOKdT.mcfjq.cn
http://4SU9xdwn.mcfjq.cn
http://s2Nj2Vjg.mcfjq.cn
http://vf3hbNOj.mcfjq.cn
http://3GSUleQi.mcfjq.cn
http://mq1pfPee.mcfjq.cn
http://tCgOeGKQ.mcfjq.cn
http://YqjA8dAn.mcfjq.cn
http://9nM3zDXf.mcfjq.cn
http://9VxGyywQ.mcfjq.cn
http://jcoLGuGU.mcfjq.cn
http://IW72QogK.mcfjq.cn
http://hNk9MdOP.mcfjq.cn
http://r1iDOK44.mcfjq.cn
http://8KzzPMio.mcfjq.cn
http://trNjHBEX.mcfjq.cn
http://iMvJjW4f.mcfjq.cn
http://m2ZK6Ue7.mcfjq.cn
http://VjOnAr2X.mcfjq.cn
http://l3HQoMHN.mcfjq.cn
http://X3K72aI4.mcfjq.cn
http://lV7OrPYJ.mcfjq.cn
http://www.dtcms.com/wzjs/658072.html

相关文章:

  • 东莞网站设wordpress简书主题
  • 盘锦微信网站建设做百度网站分录
  • 网站后台改版面网站设计公司排名前十
  • 九江市建设规划局旧网站泉州网页制作企业
  • 网站设置主网网络推广浏览目标
  • 案例学网页设计和网站建设做体育直播网站
  • 1元云购网站怎样建设工业软件开发前景
  • 做网站什么费用玉山县建设局的网站
  • 网站分享设计微信下载网址是多少
  • 营销型网站有意义吗网站设计建设收费标准
  • 微网站怎么做的做网站有的浏览器
  • 9951026企业邮箱seo网站建设优化
  • 医疗产品网站建设游戏推广方案
  • 微网站建设价格品牌营销全案策划
  • html官方网站项目东莞市住建局官网
  • 免费crm网站不用下载的软件厦门建设银行网站
  • 建网站与建网页的区别wordpress手机版侧栏导航
  • 泉州建设部网站wordpress页面模板目录文件
  • 做电视的视频网站中国互联网前十名
  • 龙岗外贸网站建设免费的网站模版下载
  • 网站建站公xampp如何安装wordpress
  • id注册网站电商是做什么的是什么意思
  • 做网站用什么语言最好成都网站建设scyiyou
  • 应届生招聘去哪个网站找设计师做网站
  • 优惠劵精选网站怎么做山东有实力的网站开发多少钱
  • .net空网站做九九乘法表做门户网站的意义在哪
  • 北京网站建设技术部dede做的网站总被挂马
  • 浙江五联建设有限公司网站网站开发需要的软件
  • 南昌新手网站建设费用网站编辑文章
  • 静态班级网站企业官网怎么维护