数据大小:单个数据大小2G-10多G不等,小于机器空余内存/环形队列元素最大个数
应用场景:高清视频采集与图像处理、数据采集
操作系统:Linux、Android(兼容信号量)
实现思路:3线程、堆、环形队列(有界)、互斥锁、信号量、条件变量、内存映射。注意不是生搬。此方式可根据不同需求建立多路缓冲,每个缓冲都用于独立的内存,互不影响。例如,相机预览、录像、推流的原始数据池。
运行结果
分别在Linux、Android平台上测试,入队线程被绑定至11号CPU,利用率高达90%以上,暂停时降至0,出队线程被绑定至10号CPU,利用率10%左右(至休眠模拟数据处理过程,未应用任何算法),不管单个元素多大字节(小于机器空余内存/环形队列元素最大个数),出队线程如何耗时,入队线程不受其任何影响。
图1中,入队线程往环形队列中添加了3个2G大小的数据帧,同时出队线程也在弹出队首数据帧,并释放空间,循环往复。
图1
图2演示了第2431帧数据的入队出队过程。并演示了第2432、2433帧数据的首地址,两者相差4G大小。图2
# 应用解码视频时应用上述办法处理图像。第一个窗口为原始视频,第二个窗口为灰度视频。