Как стать автором
Обновить

Ускорение в 3,7 раза после удаления Sleep() в WebKit

Время на прочтение1 мин
Количество просмотров4.5K
Джофф Гарен (Geoff Garen) из компании Apple обнаружил вызов Sleep() в спинлоке функции TCMalloc сборщика мусора WebKit.

 -#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 наверняка работает уже на оптимизированной версии.
Теги:
Хабы:
Всего голосов 92: ↑74 и ↓18+56
Комментарии38

Публикации

Истории

Работа

Программист С
37 вакансий

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
14 сентября
Конференция Practical ML Conf
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн