Home  >  Article  >  Backend Development  >  PHP multi-threaded programming pipe communication example analysis, multi-threaded programming example analysis_PHP tutorial

PHP multi-threaded programming pipe communication example analysis, multi-threaded programming example analysis_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:05:30810browse

Analysis of pipeline communication examples of PHP multi-thread programming, analysis of multi-thread programming examples

The examples in this article describe the usage of pipeline communication in PHP multi-thread programming. Share it with everyone for your reference. The specific analysis is as follows:

If one thread is individual heroism, then multiple threads are collectivism. You are no longer a lone ranger, but a conductor.

Pipeline communication:
1. A pipeline can be thought of as a queue. Different threads can write things to it and read things from it. Just write
Adding at the end of the queue, reading means deleting at the head of the queue.

2. Pipes generally have a size, and the default is generally 4K. That is, if the content exceeds 4K, you can only read but not write to it.

3. By default, after writing to the pipe, it will be blocked until the program that reads it has finished reading the data. And the reading thread will also be blocked,
Until a process writes data to the pipe. Of course, you can change this default attribute and use the stream_set_block function to set it to non-blocking mode.

The following is a pipeline class that I packaged (there is a problem with the naming of this class, it is not unified, and there is no time to change it to a unified one. I usually write the test code first and package it last, so the naming may not be unified):

<&#63;php
class Pipe
{
  public $fifoPath;
  private $w_pipe;
  private $r_pipe;
 
  /**
   * 自动创建一个管道
   *
   * @param string $name 管道名字
   * @param int $mode 管道的权限,默认任何用户组可以读写
   */
  function __construct($name = 'pipe', $mode = 0666)
  {
    $fifoPath = "/tmp/$name." . posix_getpid();
    if (!file_exists($fifoPath)) {
      if (!posix_mkfifo($fifoPath, $mode)) {
        error("create new pipe ($name) error.");
        return false;
      }
    } else {
      error( "pipe ($name) has exit.");
      return false;
    }
    $this->fifoPath = $fifoPath;
  }
///////////////////////////////////////////////////
// 写管道函数开始
///////////////////////////////////////////////////
  function open_write()
  {
    $this->w_pipe = fopen($this->fifoPath, 'w');
    if ($this->w_pipe == NULL) {
      error("open pipe {$this->fifoPath} for write error.");
      return false;
    }
    return true;
  }
 
  function write($data)
  {
    return fwrite($this->w_pipe, $data);
  }
 
  function write_all($data)
  {
    $w_pipe = fopen($this->fifoPath, 'w');
    fwrite($w_pipe, $data);
    fclose($w_pipe);
  }
 
  function close_write()
  {
    return fclose($this->w_pipe);
  }
/////////////////////////////////////////////////////////
/// 读管道相关函数开始
////////////////////////////////////////////////////////
  function open_read()
  {
    $this->r_pipe = fopen($this->fifoPath, 'r');
    if ($this->r_pipe == NULL) {
      error("open pipe {$this->fifoPath} for read error.");
      return false;
    }
    return true;
  }
  function read($byte = 1024)
  {
    return fread($this->r_pipe, $byte);
  }
  function read_all()
  {
    $r_pipe = fopen($this->fifoPath, 'r');
    $data = '';
    while (!feof($r_pipe)) {
      //echo "read one K\n";
      $data .= fread($r_pipe, 1024);
    }
    fclose($r_pipe);
    return $data;
  }
  function close_read()
  {
    return fclose($this->r_pipe);
  }
  /**
   * 删除管道
   *
   * @return boolean is success
   */
  function rm_pipe()
  {
    return unlink($this->fifoPath);
  }
}
&#63;>
 /*
有了这个类,就可以实现简单的管道通信了。*/

I hope this article will be helpful to everyone’s PHP programming design.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/963828.htmlTechArticle PHP multi-threaded programming pipe communication example analysis, multi-threaded programming example analysis This article tells the example of PHP multi-threaded programming Pipe communication usage. Share it with everyone for your reference. Detailed analysis...
Statement:
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