-#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はおそらく最適化されたバージョンですでに動作しています。