前提・実現したいこと
ローカルの MAC PC からデータベースへリクエストを大量送信する様なベンチマークを行いたいです
データベースへのリクエストに PHP のサーバーサイドのコードを流用したいので
できれば PHP でリクエストを並列に送るためにマルチスレッドが使いたいです
発生している問題・エラーメッセージ
後述の様な簡単なスレッドテストコードを動かそうとしたのですが Thread クラスがみつかりません
`Class 'Thread' not found`
該当のソースコード
php
1$n_threads = 10; 2 3class worker extends Thread { 4 public function run () { 5 sleep(5); 6 } 7} 8 9$threads = []; 10 11for($t = 0; $t < $n_threads; $t++) { 12 $thread = new worker(); 13 $threads[] = $threads; 14 $thread->start(); 15} 16for($t = 0; $t < $n_threads; $t++) { 17 $threads[$t]->join(); 18}
試したこと
php -m に thread っぽいものがみあたらなかったので
posix thread ライブラリをインストールしようとしました
pthreads インストール手順
を参考に pthreads-3.1.6 ソースをダウンロードしてビルド試みたんですが
./configure checking for ZTS... configure: error: pthreads requires ZTS, please re-compile PHP with ZTS enabled
といわれます
MAC に元から?はいってる /user/bin/php がスレッドセーフでないみたいで
スレッドセーフ版 PHP をビルドすることにしました
https://www.php.net/manual/ja/parallel.setup.php
ここに --enable-maintainer-zts をつけろとあったので
php-8.0.0 のソースをダウンロードしてビルドしようとしたのですが
./configure --enable-maintainer-zts --prefix=$HOME/.local configure: WARNING: unrecognized options: --enable-maintainer-zts
とオプションを認識してくれません
MacOS 上でできれば PHP 7 以上でマルチスレッド PHP を実行するまでの手順
あるいはまとまってるサイトがあれば紹介してもらえるとありがたいです
補足情報(FW/ツールのバージョンなど)
OS: MacOS X
PHP 7.3.11 (cli) (built: Jun 5 2020 23:50:40) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies
追記です
phpbrew というのをインストールしてみました
phpbrew install 8.0.0 +default +zts
+ztx という variant があるのでつけて実行してみました
それ自体は認識された様なのですが
いろいろライブラリが足りないと言われて四苦八苦しています…
zlib がみつからないといわれたので
brew install zlib して
export LDFLAGS="-L$HOME/homebrew/opt/zlib/lib $LDFLAGS" export CPPFLAGS="-I$HOME/homebrew/opt/zlib/include $CPPFLAGS" export PKG_CONFIG_PATH="$HOME/homebrew/opt/zlib/lib/pkgconfig:$PKG_CONFIG_PATH"
を実行して再度インストールしてみましたが
configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met: No package 'libzip' found No package 'libzip' found No package 'libzip' found Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBZIP_CFLAGS and LIBZIP_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.
となって詰まってしまいました
MAC 上でマルチスレッド版や PHP 自体ををビルドしたブログもあまりでてこないし
他の言語だと当たり前の様にできることでも
PHP でマルチスレッドに対応させるって予想以上に大変なことなのですね…
あなたの回答
tips
プレビュー