WebKitでSleep()を削除した後の3.7倍の高速化

AppleのGeoff Garenは、WebKitガベージコレクターTCMalloc関数のスピンロックでSleep()呼び出しを発見しました

-#if OS(WINDOWS) - Sleep(2); -#else - struct timespec tm; - tm.tv_sec = 0; - tm.tv_nsec = 2000001; - nanosleep(&tm, NULL); -#endif 

スリープを削除した後、特定の条件下でのコレクターのパフォーマンスは3.7倍に増加しました。 これは、1つの小さな最適化によって生産性が数倍向上する好例です。

HNで、これについて議論行われました。彼らは、スピンロックでの使用が悪い形と考えられるのに、なぜSleep()への呼び出しがあったのか、と言いました。 コード内の長いコメントで示されているように、彼はおそらくそこにいたのです。

その結果、WebKitでSleepコールを導入した開発者が発見されました。 彼当初、TCMallocメモリを動的に割り当てるこのカスタム関数はサーバー用に開発され、この種のスピンロックは特定の理由で存在したが、この理由はおそらくWebKitにはブラウザエンジンほど関連性がないと説明しました。

Joff Garen自身も同じ意味で話しましたが、 より視覚的な形で話しました。



WebKitコードの変更は2012年5月に行われたため、最後のSafariはおそらく最適化されたバージョンですでに動作しています。

Source: https://habr.com/ru/post/J150728/


All Articles