C++ 增加Windows上的io优先级?

C++ 增加Windows上的io优先级?,c++,windows,io,profiling,libtiff,C++,Windows,Io,Profiling,Libtiff,最初我的producer函数只写数据,现在我有了第二个线程负责写数据。生产者函数将memcpy写入循环缓冲区,并触发使用者线程开始写入 当我使用2线程方案时,我得到了所需的线程隔离、程序稳定性和在编写之前进行变量计算的能力,但是io性能差了50% 我的理论是,对于我想要调整的每个线程,都可以设置某种优先级。这可能吗 我在RAID0数据剥离配置中使用2个SSD 您所说的“io性能差50%”是什么意思?根据您的资源监视器,它尽可能高:磁盘队列已满,磁盘活动时间为100%。如果你的意思是写速度跳跃-它

最初我的producer函数只写数据,现在我有了第二个线程负责写数据。生产者函数将
memcpy
写入循环缓冲区,并触发使用者线程开始写入

当我使用2线程方案时,我得到了所需的线程隔离、程序稳定性和在编写之前进行变量计算的能力,但是io性能差了50%

我的理论是,对于我想要调整的每个线程,都可以设置某种优先级。这可能吗

我在RAID0数据剥离配置中使用2个SSD


您所说的“io性能差50%”是什么意思?根据您的资源监视器,它尽可能高:磁盘队列已满,磁盘活动时间为100%。如果你的意思是写速度跳跃-它们与任何可能的线程优先级无关。它们是由于文件碎片、fs表修改等原因导致的磁头定位造成的。

同样的200 GB工作负载所需的时间大约是原来的1.5倍。起初,利率大致相同,但后来开始落后。也就是说,前十几个千兆字节的写入时间是相同的,但与生产者函数只写入数据相比,剩余的千兆字节的写入时间更长。当然要慢一些。@EJP是的,有一个额外的内存副本,但这只在代码内存绑定的情况下才有意义,或者如果内存副本与文件写入是串行的,情况似乎不是这样。您使用什么API来写入数据?这可能会有帮助(但我没有读过):快速扫描MSDN搜索结果,看起来,为了获得高IO优先级,线程必须具有高优先级。您可以使用
SetThreadPriority
执行此操作。但是,我怀疑问题可能是写入操作的内存和/或扇区对齐。考虑使用一组扇区和页对齐的缓冲区而不是单个循环缓冲区。