Джофф Гарен (Geoff Garen) из компании Apple обнаружил вызов Sleep() в спинлоке функции TCMalloc сборщика мусора WebKit.
После удаления Sleep производительность сборщика в определённых условиях выросла в 3,7 раза. Это наглядный пример, как одна маленькая оптимизация способна в несколько раз повысить производительность.
На HN по этому поводу развернулась дискуссия: мол, зачем там вообще был вызов Sleep(), если его использование в спинлоках считается дурным тоном. Наверное, он был там по определённой причине, на что указывает длинный комментарий в коде.
В итоге обнаружился тот разработчик, который и внедрил вызов Sleep в WebKit. Он объяснил, что изначально эта кастомная функция для динамического выделения памяти TCMalloc разрабатывалась для серверов, и спинлок такого вида был там по определённой причине, но эта причина, наверное, не так актуальна для WebKit как браузерного движка.
Сам Джофф Гарен высказался в том же смысле, но в более наглядной форме:

Изменение в коде WebKit сделано в мае 2012 года, так что последний Safari наверняка работает уже на оптимизированной версии.
-#if OS(WINDOWS) - Sleep(2); -#else - struct timespec tm; - tm.tv_sec = 0; - tm.tv_nsec = 2000001; - nanosleep(&tm, NULL); -#endif
После удаления Sleep производительность сборщика в определённых условиях выросла в 3,7 раза. Это наглядный пример, как одна маленькая оптимизация способна в несколько раз повысить производительность.
На HN по этому поводу развернулась дискуссия: мол, зачем там вообще был вызов Sleep(), если его использование в спинлоках считается дурным тоном. Наверное, он был там по определённой причине, на что указывает длинный комментарий в коде.
В итоге обнаружился тот разработчик, который и внедрил вызов Sleep в WebKit. Он объяснил, что изначально эта кастомная функция для динамического выделения памяти TCMalloc разрабатывалась для серверов, и спинлок такого вида был там по определённой причине, но эта причина, наверное, не так актуальна для WebKit как браузерного движка.
Сам Джофф Гарен высказался в том же смысле, но в более наглядной форме:

Изменение в коде WebKit сделано в мае 2012 года, так что последний Safari наверняка работает уже на оптимизированной версии.
