SlideShare a Scribd company logo
1 of 37
Download to read offline
PHP7+'s OPcache can store immutable array and might replace KVS
1)1͔Βෆม഑ྻ͕01DBDIF
ʹ৐ΔͷͰ,74Λஔ͖‫͑׵‬ΒΕ
Δ͔΋͠Εͳ͍ͱ͍͏࿩
1)1FS,BJHJ	

ൃදࢿྉ



!IOX
ࣗ‫঺ݾ‬հ
❖ !IOX
❖ ॴଐɿ,-BC‫ࣜג‬ձࣾ
❖ 8FBSFIJSJOH
❖ 1)1ຊମͷ$ιʔείʔυΛಡΉͷ͕झຯ
❖ 1)1ͷόάΛ໿݅ใࠂ
ࣗ‫঺ݾ‬հ
1)1ΧϯϑΝϨϯε 1)1ΧϯϑΝϨϯεؔ੢
ࠓ೔͓࿩͢͠Δ͜ͱ
❖ 1)1͔Βෆม഑ྻ͕ϝνϟΫνϟ଎͘ͳͬͨ
❖ ࣮૷͔Β‫ݟ‬Δߴ଎Խͷཧ۶
❖ ,74ͱͷൺֱ
❖ ·ͱΊ
❖ 1)1͔Βෆม഑ྻ͕ϝνϟΫνϟ଎͘ͳͬͨ
❖ ࣮૷͔Β‫ݟ‬Δߴ଎Խͷཧ۶
❖ ,74ͱͷൺֱ
❖ ·ͱΊ
1)1ͷ஌ΒΕ͟Δੑೳվળ
❖ ϨίʔυɺΧϥϜͷ࣍‫ݩ‬഑ྻΛฦ͢ྫ
?php
function foo() {
return [
x1=[foo=1,bar=2/* (ུ) */,thud=13],
x2=[foo=1,bar=2/* (ུ) */,thud=13],
/* ໿30000ߦলུ */
x30000=[foo=1,bar=2/* (ུ) */,thud=13],
];
}
foo();
1)1ͷ஌ΒΕ͟Δੑೳվળ
❖ 1)1ͱൺ΂ͯ1)1͸ஈҧ͍ʹ଎͍
1)1ͷ஌ΒΕ͟Δੑೳվળ
❖ 01DBDIF֦ுͳͩ͠ͱࠩ͸ഒఔ౓
ഒͷߴ଎Խ͸ཧղͰ͖Δ
ഒͱ͸Ұମʜʁ
1)1͔Βʮෆม഑ྻʯ͕ಋೖ͞Εͨ
❖ ෆม഑ྻʹશΩʔɾશཁૉ͕ϦςϥϧͰ͋Δ഑ྻ
❖ ࣮૷্ͷ‫໊ͼݺ‬ɺϚχϡΞϧ౳ʹ͸ແ͍͸ͣ
❖ 1)1Ҏ߱ɺ01DBDIF͸ෆม഑ྻΛΩϟογϡ͢Δ
❖ ഑ྻߏஙͷख͕ؒθϩʹͳΓ௒εϐʔυʹͳͬͨ
࣍ͷίʔφʔͰվળͷৄࡉΛ঺հ͍͖ͯ͠·͢
❖ 1)1͔Βෆม഑ྻ͕ϝνϟΫνϟ଎͘ͳͬͨ
❖ ࣮૷͔Β‫ݟ‬Δߴ଎Խͷཧ۶
❖ ,74ͱͷൺֱ
❖ ·ͱΊ
1)1͸Ͳ͏࣮ߦ͞Ε͍ͯΔ͔ʁ	

❖ 1)1εΫϦϓτ͸ͦͷ··Ͱ͸࣮ߦͰ͖ͳ͍
❖ PQDPEFྻʹίϯύΠϧͯ͠;FOE7.্Ͱ࣮ߦ͢Δ
ίϯύΠϧॲཧ
7.࣮ߦ
PQDPEF
1)1
;FOE7.ͱ͸
❖ PQDPEFʢ7.໋ྩʣΛ࣮ߦ͢ΔԾ૝$16࣮૷
❖ PQDPEFͷ࣮ߦ‫ͱث‬εΫϦϓτ‫͔ޠݴ‬ΒPQDPEF΁ͷม
‫ث׵‬ͷೋஈߏ͑ͷ࣮૷
1)1͸Ͳ͏࣮ߦ͞Ε͍ͯΔ͔ʁ	

❖ 01DBDIF༗ޮͩͱॲཧ͕૿͑Δ
❖ Ωϟογϡώοτͨ͠ΒલஈͷॲཧΛεΩοϓͰ͖Δ
ίϯύΠϧॲཧ
7.࣮ߦ
࠷దԽ
PQDPEF
PQDPEF
Ωϟογϡ
PQDPEF
1)1
1)1࣌୅͸Ͳ͏࣮ߦ͞Ε͍͔ͯͨʁ	

❖ ઌ΄Ͳͷ1)1εΫϦϓτΛߟ͑·͠ΐ͏
?php
function foo() {
return [
x1=[foo=1,bar=2/* (ུ) */,thud=13],
x2=[foo=1,bar=2/* (ུ) */,thud=13],
/* ໿30000ߦলུ */
x30000=[foo=1,bar=2/* (ུ) */,thud=13],
];
}
foo();
1)1࣌୅͸Ͳ͏࣮ߦ͞Ε͍͔ͯͨʁ	

❖ 1)1Ͱ͸഑ྻߏஙͷPQDPEFྻʹίϯύΠϧ͞ΕΔ
❖ ʮ഑ྻʹཁૉΛ௥Ճ͢Δʯ͕‫ݸ‬ͷPQDPEF
❖ ‫ڊ‬େ഑ྻͩͱ഑ྻͷߏஙίετ͕େ͖͍
1)1࣌୅͸Ͳ͏࣮ߦ͞Ε͍͔ͯͨʁ	

❖ Ωϟογϡώοτ࣌΋PQDPEFྻͷ࣮ߦ͸ຖճඞཁ
1)1ϓϩηε ‫ڞ‬༗ϝϞϦ
ʢ01DBDIF؅ཧʣ
഑ྻߏஙͷPQDPEF
ʜ
Ωϟογϡώοτɺ࣮ߦ
1)1࣌୅͸Ͳ͏࣮ߦ͞Ε͍͔ͯͨʁ	

❖ Ωϟογϡώοτ࣌΋PQDPEFྻͷ࣮ߦ͸ຖճඞཁ
❖ ສཁૉͷ഑ྻͳΒ7.໋ྩΛສճ࣮ߦ
1)1ϓϩηε ‫ڞ‬༗ϝϞϦ
ʢ01DBDIF؅ཧʣ
഑ྻߏஙͷPQDPEF
ʜ
഑ྻͷ࣮ମ
഑ྻߏங
‫ڞ‬༗ϝϞϦͱ͸
❖ ϓϩηεؒͰ‫ڞ‬༗Ͱ͖ΔϝϞϦྖҬ
❖ 01DBDIF͸Ωϟογϡʹ‫ڞ‬༗ϝϞϦΛར༻͍ͯ͠Δ
1)1ͷෆม഑ྻ͸ແྉ
❖ 1)1Ͱ͸ෆม഑ྻͷ࣮ମ͕Ωϟογϡର৅
❖ $16ΛফඅͤͣʹߏஙࡁΈ഑ྻʹΞΫηεͰ͖Δ
‫ڞ‬༗ϝϞϦ
ʢ01DBDIF؅ཧʣ
഑ྻͷ࣮ମ
1)1ϓϩηε ෆม഑ྻ΁ͷΞΫηε
1)1ͷෆม഑ྻ͸ແྉ
❖ 1)1Ͱ͸ෆม഑ྻͷ࣮ମ͕Ωϟογϡର৅
❖ $16ΛফඅͤͣʹߏஙࡁΈ഑ྻʹΞΫηεͰ͖Δ
❖ ϓϩηεؒͰ࣮ମΛ‫ڞ‬༗Ͱ͖ΔͷͰলϝϞϦ
‫ڞ‬༗ϝϞϦ
ʢ01DBDIF؅ཧʣ
഑ྻͷ࣮ମ
1)1ϓϩηε 1)1ϓϩηε
1)1ϓϩηε
ෆม഑ྻʹ͍ͭͯখ·ͱΊ
❖ 1)1Ҏ߱ɺෆม഑ྻ͸01DBDIFͷΩϟογϡର৅
❖ શ1)1ϓϩηεͰෆม഑ྻͷ࣮ମΛ‫ڞ‬༗Ͱ͖Δ
❖ ߴ଎ͳ্ʹলϝϞϦ
❖ ‫ڊ‬େͳෆม഑ྻΛར༻͢Δো֐͕ͳ͘ͳͬͨ
༻్࣍ୈͰ,74Λஔ͖‫͑׵‬ΒΕΔͷͰ͸ʁ
❖ 1)1͔Βෆม഑ྻ͕ϝνϟΫνϟ଎͘ͳͬͨ
❖ ࣮૷͔Β‫ݟ‬Δߴ଎Խͷཧ۶
❖ ,74ͱͷൺֱ
❖ ·ͱΊ
Ϛελʔσʔλͷอ؅৔ॴͷ‫ݕ‬౼
❖ ϚελʔσʔλɺͲ͜ʹอ؅ͯ͠·͔͢ʁ
❖ Ϣʔβʔૢ࡞Ͱॻ͖‫׵‬ΘΒͳ͍σʔλ
❖ ‫ڊ‬େʹͳΓ͕ͪ
❖ ໓ଟʹมΘΒͳ͍ͷͰߴ଎ͳΩϟογϡʹೖΕ͍ͨ
❖ ,74ʹΩϟογϡͯ͠΋ྑ͍
❖ 1)1഑ྻͷ‫Ͱܗ‬σϓϩΠͯ͠΋ྑ͍ͷͰ͸ʁ
,74ͱͷੑೳൺֱ
❖ ൺֱର৅
❖ 01DBDIF
❖ 1$V
❖ QIQNFNDBDIFE
.FNDBDIFE
❖ QIQSFEJT
3FEJT
଎౓ͷൺֱ
❖ ݅ΩϟογϡΞΫηεͰͷൺֱ
଎౓ͷൺֱ
❖ ݅ΩϟογϡΞΫηεͰͷൺֱ
❖ .FNDBDIFE3FEJTʹର͠1$V͕ܻɺ01DBDIF͕
ܻ଎͍
❖ େ఍͸݅΋ΞΫηε͠ͳ͍ͷͰ‫ͱࠩޡ‬΋‫͑ݴ‬Δ
ϝϞϦফඅͷൺֱ
❖ ສཁૉΛΩϟογϡʹ৐ͤͯൺֱ
ϝϞϦফඅͷൺֱ
❖ ສཁૉΛΩϟογϡʹ৐ͤͯൺֱ
❖ .FNDBDIFE3FEJTʹର͠01DBDIF͸ফඅϝϞϦ͕ഒ
❖ 1)1ͷσʔλߏ଄ͷํ͕ແବ͕ଟ͍ͱࢥΘΕΔ
ੑೳൺֱ͔ΒಡΈऔΕΔ͜ͱ
❖ 01DBDIF͸Ϛελʔσʔλͷอ؅৔ॴͱͯ͠༏ल
❖ ߴ଎͔ͭϝϞϦফඅ΋,74ͷഒఔ౓ͰࡁΜͰ͍Δ
❖ ͱ͸͍͑ଞͷબ୒ࢶ΋௨ৗͷ༻్ͳΒे෼༏ल
❖ ࠓಈ͍͍ͯΔ΋ͷΛஔ͖‫͑׵‬Δඞཁ͸ͳ͍͸ͣ
೦ͷͨΊ஫ҙ
❖ ͜ͷखͷੑೳൺֱΛਅʹड͚͗͢ͳ͍ͰԼ͍͞😉
❖ ϘτϧωοΫҎ֎Λ଎ͯ͘͠΋શମ΁ͷӨ‫ڹ‬͸ܰඍ
❖ େ఍ͷ‫ݱ‬৔Ͱ͸ੑೳΑΓอकੑ͕େࣄ
❖ 1)1͔Βෆม഑ྻ͕ϝνϟΫνϟ଎͘ͳͬͨ
❖ ࣮૷͔Β‫ݟ‬Δߴ଎Խͷཧ۶
❖ ,74ͱͷൺֱ
❖ ·ͱΊ
·ͱΊ
❖ 1)1͔Βෆม഑ྻ͕01DBDIFͷΩϟογϡର৅
❖ ෆม഑ྻ͸ߴ଎͔ͭলϝϞϦ
❖ 3%#,74ʹஔ͍͍ͯͨσʔλʹ͍ͭͯɺ1)1ϑΝΠ
ϧԽ͢Δબ୒ࢶ͕૿͑ͨ
❖ ‫ط‬ଘͷ,74࣮૷Λஔ͖‫͑׵‬Δ΄ͲͰ͸ͳ͍ʜ͸ͣ
❖ ৽‫૷࣮ن‬ͷࡍʹ͝‫ݕ‬౼͍ͩ͘͞
͝੩ௌ
͋Γ͕ͱ͏
͍͟͝·ͨ͠
ิ଍ςετ‫ڥ؀‬ͷৄࡉ
❖ .BDNJOJ	

❖ 04NBD04.PKBWF
❖ $16()[*OUFM$PSFJ
❖ NFNPSZ(#
❖ OHJOY

More Related Content

More from Yoshio Hanawa

zval をダイエットしてみた
zval をダイエットしてみたzval をダイエットしてみた
zval をダイエットしてみた
Yoshio Hanawa
 
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
Yoshio Hanawa
 
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探るPHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
Yoshio Hanawa
 
Testing PHP extension on Travis CI
Testing PHP extension on Travis CITesting PHP extension on Travis CI
Testing PHP extension on Travis CI
Yoshio Hanawa
 

More from Yoshio Hanawa (20)

iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べたiOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
iOS/macOSとAndroid/Linuxのサンドボックス機構について調べた
 
realpathキャッシュと OPcacheの面倒すぎる関係
realpathキャッシュと OPcacheの面倒すぎる関係realpathキャッシュと OPcacheの面倒すぎる関係
realpathキャッシュと OPcacheの面倒すぎる関係
 
家庭用ブロードバンドルータ上でWordPressを動かそう
家庭用ブロードバンドルータ上でWordPressを動かそう家庭用ブロードバンドルータ上でWordPressを動かそう
家庭用ブロードバンドルータ上でWordPressを動かそう
 
Laungage Update PHP編
Laungage Update PHP編Laungage Update PHP編
Laungage Update PHP編
 
PHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作るPHPの拡張モジュールをGoで作る
PHPの拡張モジュールをGoで作る
 
GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話GitHubにバグ報告して賞金$500を頂いた話
GitHubにバグ報告して賞金$500を頂いた話
 
php-buildがいかに便利かを力説する
php-buildがいかに便利かを力説するphp-buildがいかに便利かを力説する
php-buildがいかに便利かを力説する
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
 
PHP7の拡張モジュール事情
PHP7の拡張モジュール事情PHP7の拡張モジュール事情
PHP7の拡張モジュール事情
 
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックPHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
 
PHPの正規表現と最長一致
PHPの正規表現と最長一致PHPの正規表現と最長一致
PHPの正規表現と最長一致
 
PHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイントPHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイント
 
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちは偶然にも500万個のSSH公開鍵を手に入れた俺たちは
偶然にも500万個のSSH公開鍵を手に入れた俺たちは
 
PHP7はなぜ速いのか
PHP7はなぜ速いのかPHP7はなぜ速いのか
PHP7はなぜ速いのか
 
PHPNGの動向
PHPNGの動向PHPNGの動向
PHPNGの動向
 
zval をダイエットしてみた
zval をダイエットしてみたzval をダイエットしてみた
zval をダイエットしてみた
 
Zend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探るZend OPcacheの速さの秘密を探る
Zend OPcacheの速さの秘密を探る
 
浮動小数点数の話 2013年度版
浮動小数点数の話 2013年度版浮動小数点数の話 2013年度版
浮動小数点数の話 2013年度版
 
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探るPHP-FPMとuWSGI——mod_php以外の選択肢を探る
PHP-FPMとuWSGI——mod_php以外の選択肢を探る
 
Testing PHP extension on Travis CI
Testing PHP extension on Travis CITesting PHP extension on Travis CI
Testing PHP extension on Travis CI
 

PHP7から不変配列がOPcacheに乗るのでKVSを置き換えられるかもしれないという話