<?xml version="1.0" encoding="utf-8"?>
<chapter>
    <title>Nastavení hlaviček disku má neblahý vliv</title>

    <para>Natavení hlaviček disku je jedna z časově nejnákladnějších operací, které jen můžete provádět. Možná byste viditelně nepoznali jak často se provádí, ale věřte že se dělá. V důsledku toho se prosím vyhněte následujícímu ne zrovna optimálnímu chování:</para>
    <itemizedlist>
        <listitem>
            <para>Umisťování velkého množství malých souborů po celém disku.</para>
        </listitem>
        <listitem>
            <para>Otevírání, zjišťování stavu a čtení velkého množství souborů po celém disku.</para>
        </listitem>
        <listitem>
            <para>Provádění předchozích věcí na souborech, které byly ukládány v různou dobu a tím pádem jsou nejspíše fragmentované a požadují nastavení hlaviček disku.</para>
        </listitem>
        <listitem>
            <para>Provádění předchozích věcí na souborech, které jsou v různých složkách, tím pádem určitě na různých skupinách cylindrů, což způsobí další nastavení hlaviček disku.</para>
        </listitem>
        <listitem>
            <para>Opakované dělání věcí uvedených v předchozím, když je stačí udělat jednou.</para>
        </listitem>
    </itemizedlist>
    <para>Cesty, kterými můžete optimalizovat svůj kód, aby minimalizoval nastavení hlaviček disku:</para>
    <itemizedlist>
        <listitem>
            <para>Slučte data do jednoho souboru.</para>
        </listitem>
        <listitem>
            <para>Udržujte data dohromady ve stejné složce.</para>
        </listitem>
        <listitem>
            <para>Ukládejte data do mezipaměti, aby je nebylo potřeba číst stále dokola.</para>
        </listitem>
        <listitem>
            <para>Sdílejte data tak, aby nemusela být znovu čtena z disku, když je chce každá z aplikací načíst.</para>
        </listitem>
        <listitem>
            <para>Zvažte ukládání všech dat do mezipaměti v podobě jednoho binárního souboru, který je správně zarovnán a lze pro něj použít mmap.</para>
        </listitem>
    </itemizedlist>
    <para>Problémy s nastavením hlaviček disku jsou složité hlavně pro čtení, což je bohužel přesně to co děláme. Pamatujte, že čtení je obecně synchronní, zatímco zápis asynchronní. To problém jen komplikuje, serializuje každé čtení a přispívá k prodlouženým odezvám programu</para>
</chapter>
