Introducing HHVM/Hack Async 2017/10/8@KenjiroKubota
Pro le Kenjiro Kubota istyle.inc
こういうことがありました。 多くのAPIをProxyするAPIを作る
Go
でも私はPHPerだから。
Guzzle Promise
どうせなら言語的に並列がサポートされてる Hackやってみたい
HHVM/Hack
もちろんPHPerならHHVMは知ってるよね HipHop Virtual Machine Facebook製 C++で出来てる PHPが実行できる JITコンパイラ Hack言語が実行できる Facebook,Wikipedia,Slack...etc
Hackで書くとき <?hh 書きはじめが <?php ではなく <?hh で書き始める。 拡張子は.hh .phpを上記の様に書き換えるだけでHackとして実行できる
ちょっとした疑問 Composer使えるの Yes, PHPライブラリも使えます namespace使えるの hhvm/hhvm-autoload PHP製Frameworkはつかえるの Zend-Expressive使いましたが特に問題ありません。 たぶん他 Fwもいける
PHP7でよくない
今日その話するから黙っててください。
HHVM/Hackの強み JITコンパイルされるから速い PHP7と比べると圧倒的有利とは言えなそう 型チェックが良い PHP7でも多くサポートされたけど、hh_clientで型チェックされる 独自のコレクション型がある 協調的マルチタスキングを言語的にサポート(Async/Await) 他にもHack独自の実装がありますがあとはぐぐってくださいね
Async
HHAsiocurl_exec(); を使うことでhttpレスポンスを待っている間に次の処理を開始する仕組 み HHAsiojoin(<Awaitable>); で、並列処理したものを受け取る
<?hh namespace HackUserDocumentationAsyncIntroExamplesCurl; async function curl_A(): Awaitable<string> { $x = await HHAsiocurl_exec("http://example.com/"); return $x; } async function curl_B(): Awaitable<string> { $y = await HHAsiocurl_exec("http://example.net/"); return $y; } async function async_curl(): Awaitable<void> { $start = microtime(true); list($a, $b) = await HHAsiov(array(curl_A(), curl_B())); $end = microtime(true); echo "Total time taken: " . strval($end - $start) . " seconds" . PHP_EOL; } HHAsiojoin(async_curl());
Guzzle Promiseじゃだめなの
比較 レスポンスに1秒かかるエンドポイントに対して並列に実行 並列数 HHVM(3.21.1)/Hack PHP7.1 100 1.2360050678253 秒 1.38831615448 秒 1000 2.1049609184265 秒 3.3101191520691 秒 https://github.com/kubotak-is/async-test
Hack Winner!
実際に使ってみて 並列処理ならGoがいいって思うな。 だけど、PHPerなら今日からHackで簡単に並列を実装できるよ!
PHPerのみんな~Hackやろうよ~
thanks:)

Introducing hhvm hack-async