我对Dask的本地线程调度程序感兴趣。该调度程序可以使用多个线程以“并行”方式从多维数组加载数据块。我对I / O限制的问题感兴趣,因此我暂时不考虑计算密集型应用程序。
这个事实似乎已经通过我使用Dask的store方法从随机数组加载和保存数据所做的一些速度测试得到了验证:随着块大小的增加,性能会降低(可能是因为最小的块会增加并行度)。在本实验中,我正在处理没有物理块的hdf5文件:1个数据集,其中包含数组中的所有数据。
我有两个问题:1)当顺序读取HDD时,Dask如何在读取数据时具有并行性?2)当python GIL应该防止线程同时将数据保存到内存中时,Dask如何在读取中具有并行性?
谢谢您的时间。
当在HDD上顺序读取时,Dask如何在读取数据时具有并行性?
您是正确的,如果您受硬盘读取的约束,那么使用多个线程应该没有任何性能上的好处。
但是,除了从硬盘读取数据外,可能还有其他工作要做。
当Python GIL应该阻止线程同时将数据保存到内存中时,Dask如何在读取中具有并行性?
Python的GIL对于数字工作负载并不是什么大问题,数字工作负载的大部分计算都在链接的C / Fortran库中进行。通常,如果您要在数字数据上使用类似Numpy的库,则GIL不太可能影响您。