hnwの日記

Developers Summit 2015 KANSAIでもPHP7について発表してきました

9/4に神戸で開催されたDevelopers Summit 2015 KANSAIにて登壇いたしました。発表資料は以下になります。



PHPカンファレンス関西2015でも近い内容でお話ししたのですが、そのときは性能改善まわりの情報を十分に伝えられなかった、という反省がありました。そこで、今回はCPUのキャッシュに関する話題を盛り込んでみました。この内容でちゃんと理解してもらえるか不安もあったのですが、プレゼン後に何人かとお話しさせて頂いた限りでは十分伝わっていたようで、ホッとしたような気持ちです。

資料について補足

キャッシュやメモリの速度、キャッシュラインサイズについてはCore i7/Xeonのものを紹介したつもりです。具体的な数字が無いと実感がわかないので紹介しましたが、プロから見ると若干ミスリードな内容が含まれているかもしれません。


ちなみに僕が参考にした資料は下記のものです。

質疑応答やその他の反応について補足

2点ほど補足します。

「PHP7で数値インデックスのみで構築された「本物の配列」に対し文字列キーを追加できるのか?追加すると連想配列に変わるのか?」


はい、その通りです。「本物の配列」に文字列キーを追加すると連想配列に変換されてしまいます。元の配列が巨大な場合はその変換コストも大きくなります。


実際、手元の環境で100万要素の配列に文字列キーを追加したところ30ミリ秒かかりました。一方で、1000要素の場合は20マイクロ秒でした。こうしたリスクが無視できない場合、あらかじめ文字列キーを入れておくような対策もあり得るでしょう。

「PHP7のstring型では文字列長と文字列本体がセットで使われるからメモリ上で近づけたということだが、strlen()を呼ばないコードもあるわけで、常にセットで使われるとは言えないのでは?」


PHPの文字列ではヌル文字「\0」(0x00)も正しい文字として扱われるので、文字列の終端を知るのに文字列長も管理する必要があります。言い換えると、文字列長と文字列本体は(おそらく)例外なくセットで使われると言えます。

さいごに

PHPカンファレンス関西2015に引き続き、依頼されての講演という形になりました。関係者の皆様、お声がけ頂きありがとうございました。


翌日9/5は東京でイベント参加という強行軍のため、残念ながら懇親会に出ずに東京に戻ってきてしまいました。次回があれば皆様よろしくお願いします。


僕はデブサミへの参加自体が初めてだったんですが、平日のイベントであれほど集客できるのは凄いですね。参加者の皆さん、運営の皆さん、改めまして本当にお疲れさまでした。