加入收藏 | 设为首页 | 会员中心 | 我要投稿 南平站长网 (https://www.0599zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php多线程并发是怎么完成的

发布时间:2022-02-24 00:31:18 所属栏目:PHP教程 来源:互联网
导读:java里多线程就是一个new thread的事情,php依赖apache靠着linux底层有一个多线程的办法。 今天说说如果你无法操控apache的服务器,如何模拟php并发: ?php if(function_exists(date_default_timezone_set)) { date_default_timezone_set(PRC); } function
  java里多线程就是一个new thread的事情,php依赖apache靠着linux底层有一个多线程的办法。
 
  今天说说如果你无法操控apache的服务器,如何模拟php并发:
 
  <?php
  if(function_exists('date_default_timezone_set')) {
      date_default_timezone_set('PRC');
  }
  
  function a()
  {
   $time = time();
  
   sleep(3);
   $fp = fopen('result_a'.$time.'.log', 'w');
   fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
   fclose($fp);
  }
  function b()
  {
   $time = time();
   
  if(!isset($_GET['act'])) $_GET['act'] = 'a';
  //Cuoxin.com
  if($_GET['act'] == 'a')
  {
   a();
  }
  else if($_GET['act'] == 'b') b();
  ?>
  以上代码,在本地写入一个文件。
 
  如果你访问 localhost/a.php 在两个浏览器标签尽可能快的同时打开,发现两个文件创建时间相差为3秒.
 
  但是如果你访问localhost/a.php?act=b 另一个访问/a.php?act=a 你发现两个文件创建的时间几乎差不多。
 
  对于apache来说同样的url意味着一个线程(我们或者说是进程),但是不同的URL意味着可以并发。
 
  如果php内部有下载的动作:
 
  function runThread()
  {
   down("http://localhost/test/a.php?act=a");
  }
  if($_GET['act'] == 'run')
  {
   echo 'start:';
  
   runThread();
   上面存成test.php, 然后写一段SHELL代码:
 
  #!/bin/bash
  for i in 1 2 3 4 5 6 7 8 9 10
  do
  php -q test.php &
  done 

(编辑:南平站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读