Home Backend Development PHP Tutorial How to implement true PHP multi-threading using pthreads

How to implement true PHP multi-threading using pthreads

Jul 03, 2018 pm 04:18 PM
php multithreading

This article mainly introduces the method of using pthreads to achieve real PHP multi-threading. It has a certain reference value. Now I share it with you. Friends in need can refer to

PHP 5.3 or above version. Using the pthreads PHP extension, PHP can truly support multi-threading. Multi-threading can greatly shorten program execution time when processing repetitive loop tasks

I said in my previous article that the performance bottleneck of most websites is not on the PHP server, because it can simply increase the server horizontally Or the number of CPU cores to easily cope with it (for various cloud hosts, it is more convenient to increase the VPS or the number of CPU cores. You can add VPS directly with the backup image, without even installing and configuring the operating system and environment). Instead, it lies in the MySQL database.

If you use a MySQL database and a joint query SQL, you may be able to handle the business logic. However, if you encounter a large number of concurrent requests, you will stop working.

If you use a NoSQL database, it may take ten queries to process the same business logic, but each query is faster than MySQL. Ten loop NoSQL queries may be faster than a MySQL joint query. Tens of thousands of queries/second are no problem at all.

If you add PHP multi-threading, query NoSQL through ten threads at the same time, and return the result summary output, the speed will be faster. In our actual APP product, we call a PHP interface that recommends products in real time based on user preferences. PHP needs to initiate 500 to 1,000 queries to the BigSea NoSQL database to calculate the user's personalized preference product data in real time. The role of PHP multi-threading is very obvious.

PHP extension download: https://github.com/krakjoe/pthreads

PHP manual document: http://php.net/manual/zh/book .pthreads.php

1. Extended compilation and installation (Linux), the compilation parameter --enable-maintainer-zts is a required option:

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
Copy after login

Add in php.ini:

vi /Data/apps/php/etc/php.ini
extension = "pthreads.so"
Copy after login

Gives a PHP multi-threading and For loop to capture the PHP code example of Baidu search page:

<?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)."
";
?>
Copy after login

The above is the entire content of this article. I hope it will be useful for everyone's learning. For help, please pay attention to the PHP Chinese website for more related content!

Related recommendations:

How to solve the problem of garbled characters when importing csv files into PHP

About thinkphp to implement sending email passwords Introduction to the retrieval function

The above is the detailed content of How to implement true PHP multi-threading using pthreads. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Does php support multi-threading? Does php support multi-threading? Jun 01, 2023 am 11:12 AM

PHP does not support multi-threading. The reason is: PHP does not support multi-threading by default. To use multi-threading, you need to install the pthread extension. To install the pthread extension, you must use the --enable-maintainer-zts parameter to recompile PHP.

How to use PHP multi-threading to implement a high-performance RPC server How to use PHP multi-threading to implement a high-performance RPC server Jun 29, 2023 pm 12:51 PM

How to use PHP multi-threading to implement a high-performance RPC server. With the continuous development of the Internet, there are more and more demands for distributed systems. Remote Procedure Call (RPC) is one of the communication mechanisms often used in these distributed systems. It allows programs on different machines to call remote functions just like calling local functions, thereby realizing data transmission and function calls between systems. In actual development, in order to improve the performance and concurrent processing capabilities of the system, multi-threading technology is used to

Optimize PHP multi-threaded operations and improve database performance Optimize PHP multi-threaded operations and improve database performance Jun 30, 2023 am 10:27 AM

How to improve database read and write performance through PHP multi-threading. With the rapid development of the Internet, database read and write performance has become a key issue. When our application needs to frequently read and write to the database, using a single-threaded approach often leads to performance bottlenecks. The use of multi-threading can improve the efficiency of database reading and writing, thereby improving overall performance. As a commonly used server-side scripting language, PHP has flexible syntax and powerful database operation capabilities. This article will introduce how to use PHP multi-threading technology to improve

How to improve the speed of large-scale data sorting through PHP multi-threading How to improve the speed of large-scale data sorting through PHP multi-threading Jun 29, 2023 pm 04:15 PM

How to improve the speed of large-scale data sorting through PHP multi-threading. With the rapid development of the Internet and the popularity of big data, the demand for processing massive data is also increasing. Among them, for the common problem of data sorting, how to improve the processing speed has become an urgent problem to be solved. In the field of PHP, multi-threading technology is considered an effective solution. This article will introduce how to improve the speed of large-scale data sorting through PHP multi-threading. 1. The principle of multi-threading Multi-threading refers to the existence of multiple threads at the same time. Multiple threads can execute different tasks at the same time.

How to improve database query performance through PHP multi-threading How to improve database query performance through PHP multi-threading Jun 29, 2023 pm 08:27 PM

How to improve database query performance through PHP multi-threading Introduction: With the rapid development of the Internet, database query performance has become one of the important challenges faced by developers. As a widely used server-side scripting language, PHP also plays an important role in database queries. This article will explore how to improve database query performance through PHP multi-threading technology to meet the needs of high concurrent requests. 1. What is multi-threading? Before discussing how to use multi-threading to improve database query performance, we first need to understand what multi-threading is. popular

Coroutines implement PHP multi-thread programming and efficient concurrent processing Coroutines implement PHP multi-thread programming and efficient concurrent processing Jun 30, 2023 pm 05:09 PM

PHP multi-threaded programming practice: using coroutines to implement concurrent task processing. With the development of Internet applications, the requirements for server performance and concurrent processing capabilities are becoming higher and higher. Traditional multi-threaded programming is not easy to implement in PHP, so in order to improve PHP's concurrent processing capabilities, you can try to use coroutines to implement multi-threaded programming. Coroutine is a lightweight concurrency processing model that can implement concurrent execution of multiple tasks in a single thread. Compared with traditional multi-threading, coroutine switching costs are lower

How to speed up large file downloads through PHP multi-threading How to speed up large file downloads through PHP multi-threading Jul 02, 2023 pm 04:09 PM

How to accelerate large file downloads through PHP multi-threading In today's Internet era, file transfer has become more and more common and important. However, for larger files, the download time increases significantly, causing inconvenience to users. In order to improve the download speed of large files, we can achieve acceleration through PHP multi-threading. This article will introduce how to speed up large file downloads through PHP multi-threading. First, in order to implement PHP multi-threaded downloading, we need to do some preparations. Make sure the latest version of PHP is installed on the server and enabled

Multithreading in PHP Multithreading in PHP May 23, 2023 pm 08:31 PM

In PHP programming, multi-threading is a very important programming technique if we need to perform multiple tasks or handle multiple requests at the same time. Multi-threading can enable multiple threads to run at the same time, improving program efficiency and user experience. 1. Introduction to PHP multi-threading PHP multi-threading refers to a program that executes two or more threads at the same time. Each thread is an independent sub-process and can perform tasks independently. In PHP, multithreading can be handled through the pcntl extension. The pcntl extension is a process control extension supported by PHP

See all articles