模板编程的好处;
一套处理流程,适用于多种数据类型,实现代码复用.
openpose这个项目所包含的不仅仅是姿态估计/人脸/手势关键点的定位算法;它所实现的一套多线程框架代码(用于组织各种任务的协同运行)同样也非常值得学习,由于这套框架使用了C++的模板机制\抽象接口技术,使得这套代码,可以为我所用.
抛开里面的算法实现,简要记录下openpose中多线程框架原理:
Datum---核心数据结构
Queue---worker从Queue队列中取数据,一个Queue可能是某个worker的输入源,一个worker也可以生成数据插入某个输出队列中;
Worker---工作类,处理的数据类型Datum
SubThread---子线程中运行的任务,一个subThread维护着一个Worker的列表,SubThread有四种类型:无输入无输出\仅有输入\仅有输出\有输入有输出.
Thread---线程类一个Thread维护这一个SubThread的列表,这个列表中的所有subThread在这个Thread建的子线程中运行;
ThreadManager----线程管理类,一个ThreadManager管理了队列列表和线程列表;