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 

dawei

【声明】:固原站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。