質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

1495閲覧

MAC 上の PHP でマルチスレッドコードを動かしたい

mixberryparfait

総合スコア21

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/12/18 09:19

編集2020/12/18 11:21

前提・実現したいこと

ローカルの 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 でマルチスレッドに対応させるって予想以上に大変なことなのですね…

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問