Blame optimization-guide/zh_CN/harmful.page

Packit 1470ea
Packit 1470ea
<page xmlns="http://projectmallard.org/1.0/" type="guide" style="task" id="harmful" xml:lang="zh-CN">
Packit 1470ea
    <info>
Packit 1470ea
     <link type="guide" xref="index#harm"/>
Packit 1470ea
    </info>
Packit 1470ea
    <title>Disk Seeks Considered Harmful</title>
Packit 1470ea
    

磁盘寻道是您可能遇到的最昂贵的操作之一。从查看执行的数量,可能不能了解到,但这是真的。相应地,请避免如下次优的选择:

Packit 1470ea
    <list type="unordered">
Packit 1470ea
        <item>
Packit 1470ea
            

在磁盘中到处存放很多小文件。

Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
            

在磁盘中,到处打开、查看、读取很多小文件。

Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
            

Packit 1470ea
                Doing the above on files that are laid out at different times, so as to ensure that they are fragmented and cause even more seeking.
Packit 1470ea
            

Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
            

Packit 1470ea
                Doing the above on files that are in different directories, so as to ensure that they are in different cylinder groups and cause even more seeking.
Packit 1470ea
            

Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
            

Packit 1470ea
                Repeatedly doing the above when it only needs to be done once.
Packit 1470ea
            

Packit 1470ea
        </item>
Packit 1470ea
    </list>
Packit 1470ea
    

Packit 1470ea
        Ways in which you can optimize your code to be seek-friendly:
Packit 1470ea
    

Packit 1470ea
    <list type="unordered">
Packit 1470ea
        <item>
Packit 1470ea
            

Packit 1470ea
                Consolidate data into a single file.
Packit 1470ea
            

Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
            

将数据保持在同一个目录中。

Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
            

缓存数据以避免定期重读数据。

Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
            

共享数据以便不必每个程序需要时都从硬盘读取。

Packit 1470ea
        </item>
Packit 1470ea
        <item>
Packit 1470ea
            

考虑将所有的数据缓存在单个二进制文件中,并使文件正确对齐并可以将其 mmap。

Packit 1470ea
        </item>
Packit 1470ea
    </list>
Packit 1470ea
    

Packit 1470ea
        The trouble with disk seeks are compounded for reads, which is unfortunately what we are doing.  Remember, reads are generally synchronous while writes are asynchronous.  This only compounds the problem, serializing each read, and contributing to program latency.
Packit 1470ea
    

Packit 1470ea
</page>