这里的线程操作不是简单的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 进行观察  

posted on 2012-05-09 01:45  蚂蚁跳楼  阅读(797)  评论(2编辑  收藏  举报