一般文件操作的多线程或多处理?
multithreading or multiprocessing for general file operations?
我最近阅读了一些关于多线程和多处理之间区别的精彩 SO questions/answers。我不能说我理解了我读到的所有内容,但我想我明白了要点。我认为学习更多的好方法是选择一个或另一个并将其用于我需要做的工作。
也就是说,我有一堆文件夹,每个文件夹都有一堆 mp3
文件。我想以相同的采样率和通道数对所有文件夹中的所有文件进行重新采样,然后将它们保存为 .wav
文件。我想我可以为每个进程分配一个文件夹,直到所有文件夹都已转换。
我读到多线程通常不会减少时间,因为线程很难 运行 并行。这就是为什么我倾向于这个选项。
与多线程相比,多处理是否会为文件 IO 操作提供更快的结果?
这取决于您要解决的问题中存在哪些依赖关系。如果您可以将几乎没有依赖关系(共享数据、共享变量等)的任务单独分配给 运行,那么 multi-processing 会很棒。只要启动进程所花的时间不超过 运行 就可以了。 (启动新流程的成本很高)
话虽如此,我认为为每个进程分配一个 mp3 转换任务会很好。只需确保您有一些东西可以监控哪些 mp3 文件已经被重新采样和转换以防止重复过程。
我最近阅读了一些关于多线程和多处理之间区别的精彩 SO questions/answers。我不能说我理解了我读到的所有内容,但我想我明白了要点。我认为学习更多的好方法是选择一个或另一个并将其用于我需要做的工作。
也就是说,我有一堆文件夹,每个文件夹都有一堆 mp3
文件。我想以相同的采样率和通道数对所有文件夹中的所有文件进行重新采样,然后将它们保存为 .wav
文件。我想我可以为每个进程分配一个文件夹,直到所有文件夹都已转换。
我读到多线程通常不会减少时间,因为线程很难 运行 并行。这就是为什么我倾向于这个选项。
与多线程相比,多处理是否会为文件 IO 操作提供更快的结果?
这取决于您要解决的问题中存在哪些依赖关系。如果您可以将几乎没有依赖关系(共享数据、共享变量等)的任务单独分配给 运行,那么 multi-processing 会很棒。只要启动进程所花的时间不超过 运行 就可以了。 (启动新流程的成本很高)
话虽如此,我认为为每个进程分配一个 mp3 转换任务会很好。只需确保您有一些东西可以监控哪些 mp3 文件已经被重新采样和转换以防止重复过程。