> 백엔드 개발 > PHP 튜토리얼 > PHP에서 컬과 결합된 foreach를 사용하여 멀티스레딩을 구현하는 방법 분석

PHP에서 컬과 결합된 foreach를 사용하여 멀티스레딩을 구현하는 방법 분석

高洛峰
풀어 주다: 2023-03-03 19:40:01
원래의
1256명이 탐색했습니다.

이 기사의 예에서는 PHP에서 foreach와 컬을 결합하여 멀티스레딩을 구현하는 방법을 설명합니다. 참고용으로 모든 사람과 공유하세요. 자세한 내용은 다음과 같습니다.

PHP는 멀티스레딩을 지원하지 않지만 foreach를 사용하여 의사 멀티스레딩을 수행할 수 있지만 이 의사 멀티스레딩은 지원하지 않습니다. 예를 들어 보겠습니다.

foreach 문을 사용하여 이미지 URL을 반복하고 CURL을 통해 모든 이미지를 로컬에 저장할 때 하나만 수집할 수 있는 문제가 있습니다. . 이제 foreach 및 CURL을 사용하여 여러 URL을 요청하는 방법을 요약해 보겠습니다.

방법 1: 루프 요청

$sr=array(url_1,url_2,url_3);
foreach ($sr as $k=>$v) {
 $curlPost=$v.'?f=传入参数';
 $ch = curl_init($curlPost) ;
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
 curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; // 在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回
 $data = curl_exec($ch) ;
 echo $k.&#39;##:&#39;.$data.&#39;<br>&#39;;
}
curl_close($ch);
로그인 후 복사

코드는 특별한 주의가 필요합니다. 컬_닫기는 foreach 루프의 끝 외부에 배치되어야 합니다. 내부에 배치하면 위에서 언급한 것처럼 여러 개의 IMGURL이 발생하며 하나의 URL만 수집할 수 있습니다.

방법 2 : 멀티 스레딩 루프

<?php
multi_threads_request($nodes){
  $mh = curl_multi_init();
  $curl_array = array();
  foreach($nodes as $i => $url)
  {
   $curl_array[$i] = curl_init($url);
   curl_setopt($curl_array[$i], CURLOPT_RETURNTRANSFER, true);
   curl_multi_add_handle($mh, $curl_array[$i]);
  }
  $running = NULL;
  do {
   usleep(10000);
   curl_multi_exec($mh,$running);
  } while($running > 0);
  $res = array();
  foreach($nodes as $i => $url)
  {
   $res[$url] = curl_multi_getcontent($curl_array[$i]);
  }
  foreach($nodes as $i => $url){
   curl_multi_remove_handle($mh, $curl_array[$i]);
  }
  curl_multi_close($mh);
  return $res;
}
print_r(multi_threads_request(array(
 &#39;http://www.php.cn&#39;,
 &#39;http://tools.php.cn&#39;,
));
로그인 후 복사

여기에서는 주로 컬_multi_init()을 사용하여 다중 URL 요청을 구현합니다. 그러나 PHP 자체는 멀티 스레딩을 지원하지 않습니다. , 의사 멀티스레딩 속도는 단일 스레드보다 빠르지 않을 수 있습니다.

이 기사가 PHP 프로그래밍에 종사하는 모든 사람에게 도움이 되기를 바랍니다.


PHP에서 멀티스레딩을 구현하기 위해 컬과 결합된 foreach 방법에 대한 자세한 분석은 PHP 중국어 웹사이트를 참고하세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿