PHP 다 중 스 레 드 프로 그래 밍 의 파이프 통신 실례 분석
3426 단어 PHP다 중 스 레 드파이프커 뮤 니 케 이 션
하나의 스 레 드 가 개인 영웅주의 라면 많은 스 레 드 는 집단주의 이다.너 는 더 이상 독행 협 이 아니 라 지휘자 이다.
파이프 통신:
1.파 이 프 는 하나의 대열 이 라 고 볼 수 있 고 서로 다른 스 레 드 는 안에 글 을 쓸 수도 있 고 안에서 읽 을 수도 있다.바로
대기 열 끝 에 추가 하면 읽 기 는 줄 머리 에서 삭제 합 니 다.
2.파 이 프 는 보통 크기 가 있 습 니 다.기본 값 은 4K 입 니 다.즉,내용 이 4K 를 초과 하면 읽 을 수 밖 에 없고 안 으로 쓸 수 없습니다.
3.기본적으로 파 이 프 를 기록 하면 프로그램 을 읽 고 데 이 터 를 다 읽 을 때 까지 막 힙 니 다.읽 기 스 레 드 도 막 히 고,
프로 세 스 가 파이프 에 데 이 터 를 기록 할 때 까지물론,당신 은 이러한 기본 속성 을 바 꿀 수 있 습 니 다.stream 로set_block 함수,비 차단 모드 로 설정 합 니 다.
다음은 제 가 나 누 어 설치 한 파이프 의 종류 입 니 다.
<?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
";
$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);
}
}
?>
/*
, 。*/
본 논문 에서 말 한 것 이 여러분 의 phop 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.