ホームページ バックエンド開発 PHPチュートリアル pthread を使用して真の PHP マルチスレッドを実装する方法

pthread を使用して真の PHP マルチスレッドを実装する方法

Jul 03, 2018 pm 04:18 PM
PHPマルチスレッド

この記事では主に pthread を使用して実際の PHP マルチスレッドを実現する方法を紹介します。これには一定の参考値があります。ここで共有します。必要な友人は参照してください。

PHP 5.3 以降pthreads PHP 拡張機能を使用すると、PHP はマルチスレッドを真にサポートできます。マルチスレッドにより、反復的なループ タスクを処理するときにプログラムの実行時間を大幅に短縮できます。

前回の記事で、ほとんどの Web サイトのパフォーマンスのボトルネックは PHP サーバーにあるわけではないと言いました。なぜなら、PHP サーバーは単にサーバーを水平方向に拡張できるからです。 (さまざまなクラウド ホストの場合、VPS または CPU コアの数を増やす方が便利です。オペレーティング システムや環境をインストールして構成することなく、バックアップ イメージを使用して直接 VPS を追加できます) ).代わりに、それは MySQL データベースにあります。

MySQL データベースと結合クエリ SQL を使用すると、ビジネス ロジックを処理できる可能性がありますが、大量の同時リクエストが発生すると、作業が停止します。

NoSQL データベースを使用する場合、同じビジネス ロジックを処理するのに 10 個のクエリが必要になる可能性がありますが、各クエリは MySQL よりも高速です。10 個のループ NoSQL クエリは、MySQL 結合クエリよりも高速である可能性があります。クエリ/秒はまったく問題ありません。

PHP マルチスレッドを追加し、同時に 10 個のスレッドで NoSQL をクエリし、結果の概要出力を返すと、速度が速くなります。実際の APP 製品では、ユーザーの好みに基づいてリアルタイムで製品を推奨する PHP インターフェイスを呼び出します。PHP は、ユーザーのパーソナライズされた好みの製品データをリアルタイムで計算するために、BigSea NoSQL データベースに対して 500 ~ 1,000 のクエリを開始する必要があります。 PHP のマルチスレッドは非常に明白です。

PHP 拡張機能のダウンロード: https://github.com/krakjoe/pthreads

PHP マニュアル ドキュメント: http://php.net/manual/zh/book .pthreads.php

1. 拡張コンパイルとインストール (Linux)、コンパイル パラメーター --enable-maintainer-zts は必須オプションです:

cd /Data/tgz/php-5.5.1
./configure --prefix=/Data/apps/php --with-config-file-path=/Data/apps/php/etc --with-mysql=/Data/apps/mysql --with-mysqli=/Data/apps/mysql/bin/mysql_config --with-iconv-dir --with-freetype-dir=/Data/apps/libs --with-jpeg-dir=/Data/apps/libs --with-png-dir=/Data/apps/libs --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt=/Data/apps/libs --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --enable-opcache --with-pdo-mysql --enable-maintainer-zts
make clean
make
make install        
unzip pthreads-master.zip
cd pthreads-master
/Data/apps/php/bin/phpize
./configure --with-php-config=/Data/apps/php/bin/php-config
make
make install
ログイン後にコピー

php.ini に追加します:

vi /Data/apps/php/etc/php.ini
extension = "pthreads.so"
ログイン後にコピー

Baidu 検索ページの PHP コード例をキャプチャするための PHP マルチスレッドと For ループを提供します:

<?php
  class test_thread_run extends Thread 
  {
      public $url;
      public $data;
      public function __construct($url)
      {
          $this->url = $url;
      }
      public function run()
      {
          if(($url = $this->url))
          {
              $this->data = model_http_curl_get($url);
          }
      }
  }
  function model_thread_result_get($urls_array) 
  {
      foreach ($urls_array as $key => $value) 
      {
          $thread_array[$key] = new test_thread_run($value["url"]);
          $thread_array[$key]->start();
      }
      foreach ($thread_array as $thread_array_key => $thread_array_value) 
      {
          while($thread_array[$thread_array_key]->isRunning())
          {
              usleep(10);
          }
          if($thread_array[$thread_array_key]->join())
          {
              $variable_data[$thread_array_key] = $thread_array[$thread_array_key]->data;
          }
      }
      return $variable_data;
  }
  function model_http_curl_get($url,$userAgent="") 
  {
      $userAgent = $userAgent ? $userAgent : &#39;Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)&#39;; 
      $curl = curl_init();
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($curl, CURLOPT_TIMEOUT, 5);
      curl_setopt($curl, CURLOPT_USERAGENT, $userAgent);
      $result = curl_exec($curl);
      curl_close($curl);
      return $result;
  }
  for ($i=0; $i < 100; $i++) 
  { 
      $urls_array[] = array("name" => "baidu", "url" => "http://www.baidu.com/s?wd=".mt_rand(10000,20000));
  }
  $t = microtime(true);
  $result = model_thread_result_get($urls_array);
  $e = microtime(true);
  echo "多线程:".($e-$t)."
";
  $t = microtime(true);
  foreach ($urls_array as $key => $value) 
  {
      $result_new[$key] = model_http_curl_get($value["url"]);
  }
  $e = microtime(true);
  echo "For循环:".($e-$t)."
";
?>
ログイン後にコピー

上記がこの記事の全内容です。ヘルプが必要な場合は、PHP 中国語 Web サイトに関連するコンテンツを参照してください。

関連する推奨事項:

csv ファイルを PHP にインポートする際の文字化けの問題を解決する方法

thinkphp についてメールパスワード送信の実装 取得機能の紹介

以上がpthread を使用して真の PHP マルチスレッドを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPはマルチスレッドをサポートしていますか? PHPはマルチスレッドをサポートしていますか? Jun 01, 2023 am 11:12 AM

PHP はマルチスレッドをサポートしていません。その理由は次のとおりです: PHP はデフォルトではマルチスレッドをサポートしていません。マルチスレッドを使用するには、pthread 拡張機能をインストールする必要があります。pthread 拡張機能をインストールするには、--enable- PHPを再コンパイルするためのmaintainer-ztsパラメータ。

PHP マルチスレッドを使用して高性能 RPC サーバーを実装する方法 PHP マルチスレッドを使用して高性能 RPC サーバーを実装する方法 Jun 29, 2023 pm 12:51 PM

PHP マルチスレッドを使用して高性能 RPC サーバーを実装する方法 インターネットの継続的な発展に伴い、分散システムに対する需要がますます高まっています。リモート プロシージャ コール (RPC) は、これらの分散システムでよく使用される通信メカニズムの 1 つです。異なるマシン上のプログラムからローカル関数を呼び出すのと同じようにリモート関数を呼び出すことができ、システム間のデータ転送や関数呼び出しを実現します。実際の開発では、システムのパフォーマンスと同時処理能力を向上させるために、マルチスレッド技術が使用されます。

PHPのマルチスレッド操作を最適化し、データベースのパフォーマンスを向上させます。 PHPのマルチスレッド操作を最適化し、データベースのパフォーマンスを向上させます。 Jun 30, 2023 am 10:27 AM

PHP マルチスレッドによってデータベースの読み取りおよび書き込みのパフォーマンスを向上させる方法 インターネットの急速な発展に伴い、データベースの読み取りおよび書き込みのパフォーマンスが重要な問題になっています。アプリケーションが頻繁にデータベースの読み取りと書き込みを行う必要がある場合、シングルスレッドのアプローチを使用すると、パフォーマンスのボトルネックが発生することがよくあります。マルチスレッドを使用すると、データベースの読み取りと書き込みの効率が向上し、全体的なパフォーマンスが向上します。一般的に使用されるサーバー側スクリプト言語として、PHP は柔軟な構文と強力なデータベース操作機能を備えています。この記事では、PHP マルチスレッド技術を使用して改善する方法を紹介します。

PHP マルチスレッドで大規模データのソート速度を向上させる方法 PHP マルチスレッドで大規模データのソート速度を向上させる方法 Jun 29, 2023 pm 04:15 PM

PHP マルチスレッドで大規模データのソート速度を向上させる方法 インターネットの急速な発展とビッグデータの普及に伴い、大規模データを処理する需要も高まっています。その中でも共通の課題であるデータソートについては、いかに処理速度を向上させるかが喫緊の課題となっている。 PHP の分野では、マルチスレッド技術が効果的なソリューションと考えられています。この記事では、PHPのマルチスレッド化により大規模データのソートを高速化する方法を紹介します。 1. マルチスレッドの原理 マルチスレッドとは、複数のスレッドが同時に存在し、異なるタスクを同時に実行できることを指します。

PHP マルチスレッドを通じてデータベース クエリのパフォーマンスを向上させる方法 PHP マルチスレッドを通じてデータベース クエリのパフォーマンスを向上させる方法 Jun 29, 2023 pm 08:27 PM

PHP マルチスレッドによってデータベース クエリのパフォーマンスを向上させる方法 はじめに: インターネットの急速な発展に伴い、データベース クエリのパフォーマンスは開発者が直面する重要な課題の 1 つとなっています。広く使用されているサーバー側スクリプト言語として、PHP はデータベース クエリでも重要な役割を果たします。この記事では、大量の同時リクエストのニーズを満たすために、PHP マルチスレッド テクノロジを通じてデータベース クエリのパフォーマンスを向上させる方法について説明します。 1. マルチスレッドとは何ですか? マルチスレッドを使用してデータベース クエリのパフォーマンスを向上させる方法を説明する前に、まずマルチスレッドとは何かを理解する必要があります。人気のある

コルーチンは、PHP マルチスレッド プログラミングと効率的な同時処理を実装します。 コルーチンは、PHP マルチスレッド プログラミングと効率的な同時処理を実装します。 Jun 30, 2023 pm 05:09 PM

PHP マルチスレッド プログラミングの実践: コルーチンを使用して同時タスク処理を実装する インターネット アプリケーションの開発に伴い、サーバーのパフォーマンスと同時処理能力に対する要件がますます高くなっています。従来のマルチスレッド プログラミングを PHP に実装するのは簡単ではないため、PHP の同時処理能力を向上させるために、コルーチンを使用してマルチスレッド プログラミングを実装してみることができます。 Coroutine は、単一のスレッドで複数のタスクの同時実行を実装できる軽量の同時処理モデルです。従来のマルチスレッドと比較して、コルーチンのスイッチングコストが低い

PHP でのマルチスレッド化 PHP でのマルチスレッド化 May 23, 2023 pm 08:31 PM

PHP プログラミングでは、複数のタスクを実行したり、複数のリクエストを同時に処理したりする必要がある場合、マルチスレッドは非常に重要なプログラミング手法です。マルチスレッドにより、複数のスレッドを同時に実行できるようになり、プログラムの効率とユーザー エクスペリエンスが向上します。 1. PHP マルチスレッドの概要 PHP マルチスレッドとは、複数のスレッドを同時に実行するプログラムのことで、各スレッドは独立したサブプロセスであり、独立してタスクを実行できます。 PHP では、pcntl 拡張機能を通じてマルチスレッドを処理できます。 pcntl 拡張機能は、PHP でサポートされているプロセス制御拡張機能です。

PHP マルチスレッドを通じて大きなファイルのダウンロードを高速化する方法 PHP マルチスレッドを通じて大きなファイルのダウンロードを高速化する方法 Jul 02, 2023 pm 04:09 PM

PHP マルチスレッドを通じて大きなファイルのダウンロードを高速化する方法 今日のインターネット時代では、ファイル転送はますます一般的かつ重要になってきています。ただし、ファイルが大きい場合、ダウンロード時間が大幅に長くなり、ユーザーに不便を与えます。大きなファイルのダウンロード速度を向上させるために、PHP マルチスレッドによる高速化を実現できます。この記事では、PHPのマルチスレッドを利用して大容量ファイルのダウンロードを高速化する方法を紹介します。まず、PHP マルチスレッド ダウンロードを実装するには、いくつかの準備を行う必要があります。最新バージョンの PHP がサーバーにインストールされ、有効になっていることを確認してください

See all articles