zoukankan      html  css  js  c++  java
  • 线程、socket、stl 以及并发设计

    这里的线程操作不是简单的pthread_create创建一个线程这样的讲解。针对线程创建合理的模型,利于并发设计:

    案例:

         主流程库处理模型处理完之后,需要进行图片压缩和入库操作,那么我们需要采用半同步/半异步的线程模型;该模型主要目的在于将可能引起阻塞的操作剥离,由单独的处理线程来进行处理并反馈.

         半同步/半异步模型核心在于具备 同步层/队列层/异步层.

         对于ACE框架来说,任何线程可以通过继承ACE_TASK进行实现,而队列层可以由ACE_MESSAGE_BLOCK进行封装实现。

         因为异步层往往意味着线程池的处理、同步集合的处理,由此如下内容来完成同步操作:

         1.ACE_Condition<ACE_Thread_Mutex> work_conf 来完成变量触发的监控,异步层的处理结果需要反馈给同步层,这里采用该变量work_conf.single()来完成变量触发传输的过程。

         2.线程池队列,使用 ACE_Unbounded_Queue<Worker*> workerpool_; 其中workpool.is_empty()用于判断线程池是否满,dequeue_head(void*)用于分配一个线程池的线程对象;enqueue_tail(void*);将处理完的线程放入线程池中。 

         而同步层的设计中,最重要的便是考虑到异步层的反馈的接口操作。 

         而领导者/跟随者模型中,同样使用到线程池,区别在于其没有队列层,其没有一个独立的线程用来监控信息并分发消息,线程中随机选举一个领导者线程来处理主要逻辑,有策略的变更角色以实现。

         可对应Proactor与 Reactor 进行观察  

  • 相关阅读:
    数据库MySQL技术-基础知识
    NC文件的处理【netcdf】
    设计模式-策略模式---Strategy(对象行为型)
    final修饰的变量是引用不能改变,还是引用的对象不能改变
    Spring之配置文件加载方式
    hibernate的基础学习--多表关联数据查询
    hibernate的基础学习--多对多关联
    hibernate的基础学习--一对一关联
    hibernate的基础学习--一对多关联
    hibernate的基础学习
  • 原文地址:https://www.cnblogs.com/xianqingzh/p/2491083.html
Copyright © 2011-2022 走看看