Windows与Linux文件IO速度的差异

2021-10-17 14:29:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为Unix和Windows操作系统开发python2应用程序,它可能会在用户请求时生成大量的输出文件(例如50k文件)。在测试期间,我注意到,与Linux上的相同任务相比,在Windows上完成输出生成任务花费了非常多的时间。你知道吗

因此,我做了一点基准测试,生成一些随机文本并将其写入50k文件,然后在Windows和Linux上删除这些文件(我有一台具有windows10和Archlinux双引导的机器,所以下面的代码是在同一台机器上执行的)。你知道吗

import os
from os.path import join

str_to_write = "a"*500

tdir = "temp"

def create_files():
    os.makedirs(tdir)

    for i in xrange(50000):
        with open(join(tdir, "{}.txt".format(i)), "w") as fh:
            fh.write(str_to_write)

def remove_files():
    for i in os.listdir(tdir):
         os.remove(join(tdir, i))

结果

Linux

%time create_files()
Wall time: 896 ms
%time remove_files()
Wall time: 555 ms

窗口

%time create_files()
Wall time: 1min 18s
%time remove_files()
Wall time: 21.4 s

我注意到在Windows 10上,Windows defender的实时检查在默认情况下是打开的,但即使在关闭后:

# Windows defender real-time check off
%time create_files()
Wall time: 27.5 s
%time remove_files()
Wall time: 17.5 s

这完全是由于文件系统(NTFS和Ext4)的差异造成的吗?有什么方法可以减少在Windows上生成许多易于分发的输出文件的时间吗?你知道吗

编辑:忘记提到这些基准测试是在nvmem2.SSD上执行的。你知道吗