openpose与设计模式

openpose与设计模式 ,

openpose的demo采用的是生产者与消费着设计模式,

src/openpose/producer/producer.cpp:1:#include <openpose/producer/producer.hpp>

examples/tutorial_api_cpp/16_synchronous_custom_output.cpp:25:    void workConsumer(const std::shared_ptr<std:

 

那么生产者模式和消费者模式 ,以及发布者订阅者模式这样的设计模式,在GOF 23种设计模式中是不存在的,,其实这个从广义上来说,和GOF23种里面的观察者模式比较近,可以归类为观察者模式。如下解释一下这三个之间的联系与区别。后续有时间会仔细分析一下openpose的代码逻辑。

这两个模式确实有点相似,都为了实现程序的解耦产生的,观察者一般又称发布/订阅模式,它一般是有一个主题对象,然后有多个订阅者去关注它,当它的状态发生变化时,会自动通知这些订阅者;而消费者模式类似一个缓存队列的概念,它也称为生产者/消费者模式,生产者只负责生产数据不去做处理(缓解高并发的问题),而消费者只从消费中间件里拿到所要处理的数据,并进行相应的逻辑处理工作,生产者与消费者是相互不知道对方的存在的,或者说他们可以是不同平台的,不同语言的,即解耦的!

图像中的消费者模式

 

图像中的观察者模式

而对于分布式的观察者模式,也有比较直观的图像

在实际应该中,我们也会把观察者(发布/订阅)做成多个发布,一个订阅的变态模式,当然,大叔认为他们是可以多对多的。

观察者模式与消费者模式的区别

订阅者肯定是个消费者,但消费者不一定是订阅者,发布者一定是个生产者,但生产者不一定是个发布者。

订阅发布者模式有时也称为观察者模式,订阅发布者(观察这和被观察者)存在着主动 被动的关系,而生产者消费者比较中性吧。 订阅发布模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象。这个主题对象在自身状态变 化时,会通知所有订阅者对象,使它们能够自动更新自己的状态。而生产者消费者关系可以是1对1,1对多,多对1,多对多关系

在23种设计模式中的观察者模式中,并没有中间介-队列的概念,但生产者消费者模式再多线程环境下好像天生就有队列的概念。在订阅发布者之间引入消息队列后,可以实现订阅者和发布者之间的解耦,任务可以很好的以异步方式进行处理,所以说是否有中间队列不是订阅发布者模式和生产者消费者模式的区别!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值