正在加载一批图像-线程分配
Loading batch of images - Thread allocation
所以,我有很多图像要从磁盘加载,我想知道应该为任务分配多少线程才能获得最大性能。
我没有指定SO,因为我的项目是跨平台的。
我认为我将主要使用PNG,即解压缩速度不慢,但需要一些解压缩。
此外,如果我最终为每个图像创建一个线程,那么线程开销是否足够大,足以显著降低我的进程速度?
- 有时生产者-消费者体系结构就足够好了
- 在其他情况下,你所描述的也可以工作,因为你没有更多的可用CPU可以处理的线程(即比#CPU*2更多的线程通常(并不总是)会导致颠簸)
您需要进行一些测试,以查看哪种模型最适合您。想想这些图像来自哪里(磁盘?它们是否在磁盘上的连续位置。产生多个线程并等待磁盘IO从磁盘加载一小块照片,然后上下文切换到另一个线程并在磁盘上进行另一次搜索以获得另一小块文件,依此类推,这有意义吗?
我建议尝试单线程应用程序。
每个磁盘一个线程似乎是一个合理的开始。您可以将其设置为运行时调整参数,以查看什么最有效,特别是如果存在或可能存在非本地网络磁盘(即高延迟),或者,正如其他人所建议的,需要进行任何解压缩或视频处理。
正如其他人发布的那样,每张图片一个线程不是一个好主意。您将需要一些P-C队列来向线程提供包含映像缓冲区+文件规范的对象,并在加载完成后返回相同的对象——连续创建/终止/销毁线程是浪费、困难和容易发生灾难的。
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 使用FFMPEG将RGB图像序列保存到.mp4时出现问题
- 将RGB图像保存为PPM格式
- 将图像添加到资源文件夹UWP C++
- 彩色图像的卤化物处理平均值
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 重新定位图像时如何前进到下一个内存块
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 为什么 BMP 图像上的 imwrite 会卡住/不返回?
- Gstreamer:每 5 秒使用多文件墨水保存图像/jpeg
- 如何使用CImg打开图像?
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 正在加载一批图像-线程分配