>  기사  >  백엔드 개발  >  PHP의 큐 원리와 파일 작성을 위한 그래픽 코드에 대한 자세한 설명

PHP의 큐 원리와 파일 작성을 위한 그래픽 코드에 대한 자세한 설명

黄舟
黄舟원래의
2017-11-02 09:21:371387검색

이 문서의 예에서는 PHP 대기열 원칙과 대기열 기반 파일 작성 사례를 설명합니다. 참조를 위해 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

큐는 선입선출 원칙에 따라 수행되는 선형 테이블입니다.

입력:

종료:

PHP 대기열 구현: 첫 번째 요소는 대기열의 헤드이고 마지막 요소는 대기열의 꼬리입니다

<?php
/**
 * 队列就是这么简单
 *
 * @link
 */
$array = array(&#39;PHP&#39;, &#39;JAVA&#39;);
array_push($array, &#39;PYTHON&#39;); //入队列
array_shift($array); //出队列

이중 종료 대기열이란 무엇입니까? (혹은 양방향 큐) 데크, 풀네임은 더블엔디드 큐인가요?

즉, insertLeft() 및 insertRight() 메서드와 RemoveLeft() 및 RemoveRight() 메서드를 호출하면 대기열의 어느 부분에서든 요소를 ​​입력하거나 대기열에서 제거할 수 있습니다. insertLeft() 및 RemoveLeft() 메서드 호출이 엄격히 금지된 경우(또는 오른쪽 세그먼트의 작업이 비활성화된 경우) 이중 종료 대기열은 스택처럼 작동합니다. insertLeft() 및 RemoveRight()(또는 그 반대의 다른 메소드 쌍)을 호출하는 것은 금지되어 있으며 해당 기능은 대기열과 동일합니다. Deque는 스택이나 큐에 비해 다목적 데이터 구조입니다.

PHP는 이중 끝형 큐를 구현합니다

<?php
class Deque
{
  public $queue = array();
  /**(尾部)入队 **/
  public function addLast($value)
  {
    return array_push($this->queue,$value);
  }
  /**(尾部)出队**/
  public function removeLast()
  {
    return array_pop($this->queue);
  }
  /**(头部)入队**/
  public function addFirst($value)
  {
    return array_unshift($this->queue,$value);
  }
  /**(头部)出队**/
  public function removeFirst()
  {
    return array_shift($this->queue);
  }
  /**清空队列**/
  public function makeEmpty()
  {
    unset($this->queue);
  }
  /**获取列头**/
  public function getFirst()
  {
    return reset($this->queue);
  }
  /** 获取列尾 **/
  public function getLast()
  {
    return end($this->queue);
  }
  /** 获取长度 **/
  public function getLength()
  {
    return count($this->queue);
  }
}

큐 사용:

큐는 데이터 전송 및 저장을 비동기적으로 매우 잘 처리할 수 있습니다. 데이터베이스에 데이터를 자주 삽입하고 엔진이 자주 제출할 때. 데이터를 대기열에 비동기식으로 삽입할 수 있습니다. 또한 FLV 비디오 변환, 휴대폰 문자 메시지 보내기, 이메일 보내기 등과 같은 메시지 대기열을 통한 처리를 위해 느린 처리 ​​논리와 동시성이 제한된 처리 논리를 백그라운드에 배치할 수도 있습니다.

프로젝트 사례

여기에 프로젝트가 있습니다. 서버 권한 문제로 인해 대기열 프로그램을 설치할 방법이 없으며 동시성은 서비스 제공 업체의 데이터베이스에 대한 최대 연결 수는 300 이상입니다. 300. 이 문제를 해결하기 위해 간단한 큐 프로그램을 작성했습니다. 코드는 다음과 같습니다

큐 코드 읽기:

<?php
set_time_limit(0);
$file_name3 = &#39;3.txt&#39;;//这个地方是讲队列文件读出的内容写入文件,test中代替的是mysql数据库操作
$file3 = fopen($file_name3,&#39;a&#39;);
while(true)
{
  $c = FALSE;
  $file_name = &#39;1.txt&#39;;//队列文件
  $file = fopen($file_name,&#39;r&#39;);
  if(!feof($f))
  {
    //获得第一条数据
    $a = fgets($file);
    if(!empty($a))
    {
      $c = TRUE;
      fwrite($file3,$a);//这里可以改为数据库操作
    }
  }
  fclose($file);
  if($c)
  {
    //将文件的第一条数据删除
    exec(&#39;sed -i \&#39;1d\&#39; /var/www/csv_sql/1.txt&#39;);
  }
  sleep(1);
  if(time()>=strtotime(&#39;20160416150000&#39;))
  {
    exit;
  }
}
fclose($file3);

읽기 큐 프로그램은 실제로 종료 지점이 설정되지 않은 경우 무한 루프 프로그램입니다. , 계속 반복됩니다

파일 읽기

큐 프로그램 작성은 비교적 간단합니다. 즉, 파일 쓰기

<?php
set_time_limit(0);
$file_name2 = &#39;2.txt&#39;;//test中用来比对队列程序是否正常的
$file2 = fopen($file_name2,&#39;a&#39;);
for($i=1;$i<11;$i++)
{
  $file_name = &#39;1.txt&#39;;//队列文件
  $file = fopen($file_name,&#39;a&#39;);//fopen的mode属性必须是a或a+
  $str = $i.&#39;--&#39;.rand(100001,999999);
  fwrite($file,$str."\n");
  fwrite($file2,$str."\n");
  sleep(1);
  fclose($file);
}
fclose($file2);

위 내용은 PHP의 큐 원리와 파일 작성을 위한 그래픽 코드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.