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

做网站页面遇到的问题工程建设与设计好发表吗

做网站页面遇到的问题,工程建设与设计好发表吗,wordpress 绿色 炫 模板,如何提高网站文章收录Muduo库EventLoopThread模块详解 muduo库的EventLoopThread模块是一个封装了EventLoop和线程的组件,它的核心目标是实现“每个线程一个EventLoop”的Reactor模式。 一、模块作用 线程与EventLoop绑定 创建一个新线程,并在该线程中运行一个EventLoop对象…

Muduo库EventLoopThread模块详解

muduo库的EventLoopThread模块是一个封装了EventLoop和线程的组件,它的核心目标是实现“每个线程一个EventLoop”的Reactor模式。


一、模块作用

  1. 线程与EventLoop绑定
    创建一个新线程,并在该线程中运行一个EventLoop对象,确保线程安全地启动和销毁。
  2. 简化线程间通信
    提供接口让其他线程可以向该EventLoop提交异步任务。
  3. 生命周期管理
    自动管理线程的启动和EventLoop的销毁。

二、核心实现解析

1. 类定义
class EventLoopThread : noncopyable {
public:EventLoopThread();~EventLoopThread();EventLoop* startLoop();  // 启动线程并返回关联的EventLoopprivate:void threadFunc();       // 线程入口函数EventLoop* loop_;        // 指向子线程中的EventLoopbool exiting_;           // 退出标志Thread thread_;          // 封装的线程对象MutexLock mutex_;        // 互斥锁Condition cond_;         // 条件变量
};
2. 关键函数分析
  • startLoop()
    启动线程并返回其管理的EventLoop

    EventLoop* EventLoopThread::startLoop() {thread_.start();         // 启动线程(内部调用pthread_create){MutexLockGuard lock(mutex_);while (loop_ == nullptr) {cond_.wait();    // 等待线程函数完成EventLoop初始化}}return loop_;
    }
    
  • threadFunc()
    线程的实际入口函数,负责创建EventLoop并运行事件循环:

    void EventLoopThread::threadFunc() {EventLoop loop;          // 栈上创建EventLoop对象{MutexLockGuard lock(mutex_);loop_ = &loop;      // 将地址暴露给外部cond_.notify();      // 通知startLoop()函数}loop.loop();             // 进入事件循环(阻塞在此处)loop_ = nullptr;         // 退出后置空
    }
    
3. 同步机制
  • 条件变量 (cond_)
    确保主线程调用startLoop()时,子线程的EventLoop对象已经完成初始化。
  • 互斥锁 (mutex_)
    保护loop_指针的线程安全访问。

三、使用场景

1. 创建并启动线程
EventLoopThread ioThread;
EventLoop* loop = ioThread.startLoop(); // 返回子线程的EventLoop
2. 跨线程提交任务
loop->runInLoop([]{// 该回调将在ioThread所属线程执行printf("Execute in IO thread\n");
});

四、注意事项

  1. 单次启动限制
    startLoop()只能调用一次,多次调用会导致未定义行为。
  2. 生命周期管理
    EventLoop对象生命周期由线程函数控制,退出时需要调用EventLoop::quit()
  3. 线程安全
    loop_指针的访问必须通过互斥锁保护。

五、设计思想

  1. RAII管理资源
    通过thread_.start()~EventLoopThread()自动管理线程生命周期。
  2. 隐藏实现细节
    用户无需关心线程同步的具体实现。
  3. 遵循One Loop Per Thread
    每个EventLoopThread严格对应一个专用线程。

六、性能优化点

  1. 延迟创建
    EventLoop对象在子线程中创建,避免主线程负担。
  2. 无锁设计
    通过条件变量同步,仅在初始化时有短暂锁竞争。

通过这种设计,EventLoopThread为构建高性能多线程服务提供了基础设施,典型应用场景包括:

  • IO线程池(EventLoopThreadPool
  • 专用日志线程
  • 数据库访问线程

文章转载自:

http://JX9U38lw.gbrdx.cn
http://oIl2Y7rH.gbrdx.cn
http://lYkmnOKF.gbrdx.cn
http://JLlWJvZM.gbrdx.cn
http://InoFSR8Z.gbrdx.cn
http://pOKOdc1z.gbrdx.cn
http://Q4y62l91.gbrdx.cn
http://Uc1OGHZq.gbrdx.cn
http://23eP5lSE.gbrdx.cn
http://WBbIvYtI.gbrdx.cn
http://WEvHJx9s.gbrdx.cn
http://BuhSvqid.gbrdx.cn
http://uC48bpMj.gbrdx.cn
http://fmAuhPNq.gbrdx.cn
http://NyDCOoGW.gbrdx.cn
http://SXRyOymf.gbrdx.cn
http://bEul1AI1.gbrdx.cn
http://Otfp4dpZ.gbrdx.cn
http://calnzbWR.gbrdx.cn
http://Pg482048.gbrdx.cn
http://AEGijUGx.gbrdx.cn
http://CiuoBpQl.gbrdx.cn
http://urjh67F4.gbrdx.cn
http://hTQPXBiV.gbrdx.cn
http://tVtdfQKF.gbrdx.cn
http://037rwOst.gbrdx.cn
http://UU5EqTyQ.gbrdx.cn
http://S6FNoFff.gbrdx.cn
http://CZksqIZh.gbrdx.cn
http://4gI9FkKP.gbrdx.cn
http://www.dtcms.com/wzjs/692766.html

相关文章:

  • 网站301什么意思东莞做网站服务商
  • 中国建设银行网站密码是什么意思wordpress 建站赚钱
  • 给企业开发网站如何建设和优化一个网站
  • 手机网站的建设icp备案网站名称是什么意思
  • 做电商网站有什语言好京津冀协同发展心得体会
  • 永川网站建设河源市建设网站
  • wordpress拼图怎么提高seo排名
  • 商丘哪里教做网站的如何自己做优惠卷网站
  • 有趣的网站名称制作网站参考
  • 关键词没有排名的网站怎么做wordpress媒体库上限
  • 江苏住房建设厅主办网站上海网站设计kinglink
  • 珠海专业网站制作wordpress网页打开很慢
  • 百度网站怎么建设的深圳自适应网站制作
  • 广州网站推广哪家强旅游网站开发指导
  • 重庆网站制作公司 淘宝做网站价格
  • 电子商务网站建设报价网页设计参考图
  • 乐云seo网站建设公司平台网站的策划设计
  • 太原住房与城乡建设厅网站wordpress如何设计首页文章显示
  • 企业网站建设的报价电商推广渠道有哪些
  • 网站建设难点自助网站建设方法
  • 男女做暧暧视频免费网站会员管理系统app免费版
  • 建网站非要做外链吗四线城市做网站建设怎么样
  • 微网站开发外包南京网站定制
  • 天门市网站建设哈尔滨网站建设企业
  • 湖州网站建设有哪些做搜狗pc网站优化排
  • 毕业室内设计代做网站怎么做公司的中英文网站
  • 黄冈做网站的公司哪家好东莞专业网站建设服务
  • 网站建设业务的延伸性好听顺口的公司名字
  • 深圳罗湖网站设计公司价格建行app官方下载
  • 备案的网站名wordpress 七牛 图床