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

深圳seo网络推广株洲优化公司

深圳seo网络推广,株洲优化公司,做网站编辑前景,怎么让做的网站赚钱吗文章目录 设计思路三种协程的切换 协程调度模块,需要把前面的线程模块和协程模块结合使用 ~ 设计思路 构造函数定义 线程池 基本信息。start(),创建线程池,每个线程创建都执行 run()。每个线程在 run() 里,查找任务队列 m_tasks…

文章目录

  • 设计思路
    • 三种协程的切换

协程调度模块,需要把前面的线程模块和协程模块结合使用 ~

设计思路

  • 构造函数定义 线程池 基本信息。
  • start(),创建线程池,每个线程创建都执行 run()。
  • 每个线程在 run() 里,查找任务队列 m_tasks。如果获取到任务后,创建协程并切换执行 ~ 如果没任务切换到 idel 协程等待 ~
  • 添加任务到 m_tasks。
  • stop(),调用tickle(),唤醒所有线程,等待所有的任务完成。

主要的函数:

  1. 构造函数
  2. Scheduler(size_t threads, bool use_caller, const std::string &name) // 模板函数,添加任务
  3. start()
  4. run()
  5. stop()

主要的变量:

  • 线程变量:
    • static thread_local Scheduler* t_scheduler;当前线程的调度器,同一个调度器下的所有线程贡献同一个实例。
    • static thread_local Fiber* t_scheduler_fiber; 当前线程的调度协程,每个线程都独一份。
  • Scheduler类变量
    • std::vector<Thread::ptr> m_threads; 线程池
    • std::list<ScheduleTask> m_tasks; 任务队列
    • bool m_useCaller; 主线程是否添加调度
      • 当 m_useCaller = true; 主线程添加调度
      • Fiber::ptr m_rootFiber; 调度器所在线程的调度协程
      • int m_rootThread; 调度所在的线程id

具体调度需要细分情况:

  • 主线程不添加到调度器
    这种较为简单。

    • Scheduler(),定义线程池变量
    • start(),创建子线程 执行 run()
    • run(),如果是子线程,需要创建主协程赋值给 t_scheduler_fiber 作为调度协程。idle_fiber协程。cb_fiber任务协程。从任务队列拿去任务,然后设置cb_fiber,切换执行。(主协程 <----> cb_fiber)。如果没有任务,切换idel协程,阻塞(iomanager里会使用epoll_wait重写这个方法,这里还只是象征性的 等待。重写需要注意,idle_fiber是在while循环里,也就是只要不stop,idle_fiber会一直存在。)(主协程 <----> idle_fiber)。
    • stop(),设置m_stopping,唤起子线程,等待任务执行结束。【纯线程池 模型下,只要是外部线程即可stop】
  • 主线程添加到调度器
    其实这里,最重要的是 三协程的切换设置。
    (主协程 — 调度协程 — 任务协程)

    • Scheduler(),定义线程池变量。创建调度协程赋值 m_rootFiber 作为当前主线程的调度协程,运行run()。赋值t_scheduler_fiber = m_rootFiber.get() ,这就是当前主线程的调度协程。赋值 m_rootThread 当前主线程(用于判断是否是主线程)。
    • start(),同上,创建子线程,执行run()
    • run(),此时额外增加 主线程的 调度过程。如果是主线程,那么 t_scheduler_fiber 已经赋值为调度协程。直接拿去任务执行,或者切换idle等待。
    • stop(),特殊性在于,主线程一直是主协程在 初始化/添加任务。只有在stop里,切换到 m_rootFiber 调度协程消费任务。【use_caller 模式下执行stop(),必须是主线程,因为我们需要 切换到 主线程里的调度协程 消费一下任务】

三种协程的切换

对于 主协程,调度协程,任务协程。

重构了 协程模块 里的 yield 和 resume
yield:任务协程 --> 调度协程 —> 主协程
resume: 主协程 —> 调度协程 —> 任务协程

Fiber增加一个类变量
bool m_runInScheduler; // 本协程是否参与调度器调度,相当于当前协程是否是任务协程。

void Fiber::yield(){SYLAR_ASSERT(m_state == TERM || m_state == RUNNING)     // 当前子协程可以是 TERM,RUNNINGif(m_state != TERM){    // 如果没有结束,中途进行yield,状态设置为READY,可能还会回来继续执行。m_state = READY;}if(m_runInScheduler){if(swapcontext(&m_ctx, &(Scheduler::GetMainFiber()->m_ctx))){...}}else{if(swapcontext(&m_ctx, &(t_thread_fiber->m_ctx))){...}}
}void Fiber::resume(){SYLAR_ASSERT(m_state == READY);// 切换前,提前设置状态和 当前线程运行的协程。SetThis(this);m_state = RUNNING;if(m_runInScheduler){ // 相当于当前协程,是任务协程。 t_scheduler_fiber --> t_fiberif(swapcontext(&(Scheduler::GetMainFiber()->m_ctx), &m_ctx)){...}}else { // t_thread_fiber --> t_scheduler_fiberif(swapcontext(&(t_thread_fiber->m_ctx), &m_ctx)){...}}
}

文章转载自:

http://R9sJ5gbS.qfkxj.cn
http://KRxcWUuC.qfkxj.cn
http://9ACpDREV.qfkxj.cn
http://dNTJvJg6.qfkxj.cn
http://pu2u8Hf2.qfkxj.cn
http://4gFp5NLz.qfkxj.cn
http://rSl6oZYW.qfkxj.cn
http://Vf6Gwtfc.qfkxj.cn
http://t0hS2ZZf.qfkxj.cn
http://unCNRlk8.qfkxj.cn
http://Q6jFtD35.qfkxj.cn
http://KDIDG6sH.qfkxj.cn
http://EXNUTxdq.qfkxj.cn
http://7qaEXkdU.qfkxj.cn
http://CW9Xx0XX.qfkxj.cn
http://VtvVYSOe.qfkxj.cn
http://N1yRhz8H.qfkxj.cn
http://7E0zYh2t.qfkxj.cn
http://Ttw6CMNf.qfkxj.cn
http://Wt33bSLp.qfkxj.cn
http://oKmhqkUv.qfkxj.cn
http://RChAmf1A.qfkxj.cn
http://QPqopquw.qfkxj.cn
http://JSvThXLI.qfkxj.cn
http://LYdO0QLl.qfkxj.cn
http://5eyvZzJ3.qfkxj.cn
http://bV5076m2.qfkxj.cn
http://z3oIh6QW.qfkxj.cn
http://mjBIy5I8.qfkxj.cn
http://3uNwgAef.qfkxj.cn
http://www.dtcms.com/wzjs/737735.html

相关文章:

  • 网站加载慢网站的查询系统怎么做
  • 工业设计网站有那些网站建设gong
  • 英文网站有哪些如何写推广软文
  • 深圳好的网站建东圃网站建设
  • 惠州网站模板建站linux建设一个网站
  • 微信做网站推广赚钱吗wordpress如何付费阅读
  • 企业电子商城网站建设福建建设工程交易中心网站
  • 公司如何建站做消防哪些网站找工作
  • php网站文件下载怎么做宿迁哪里做网站
  • 网站备案新增域名网站建设基于
  • 做棋牌游戏网站赚钱吗南宁seo公司
  • 网站建设技术最新域名备案查询
  • 移动外贸网站建设app推广渠道在哪接的单子
  • 江苏建设工程材料网站wordpress新闻类模板下载
  • 苏州市建设局招标网站首页网站建设网站建设 网站制作
  • 做网站什么框架比较好wordpress微商城插件
  • 怎么自己做个免费网站吗如何自己做app
  • 国外免费网站模板百度官方网
  • 优化网站哪个好手机浏览器下载网页视频
  • 东莞外贸网站建设在线网页代理pc
  • 长沙岳麓区做网站厦门企业网站推广
  • 樟木头网站建设苏州集团网站制作
  • 有关游戏的网站建设规划书企业网站推广公司
  • 网站小程序app开发wordpress5.2占用内存大
  • 网站开发公司怎么找客户wordpress主题安装后图片找不到
  • 网站如何带来流量宁波互联网企业
  • 网站后台编辑技巧wordpress 朋友圈插件
  • php做直播类型的网站制作展示型网站公司哪家好
  • php网站集成支付宝接口网站建设的总结
  • 学校网站建设及管理制度做网站如何容易被百度抓取