热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PHP模拟多线程的简单方法

假设一个问题,我们需要生成3个文件,每一个文件生成都需要10秒钟(当然,现实生活中很少有机会遇到一个文件要生成10秒的,只是为了说明多线程而假设)。如果我们写一个for循环,每次循环生成一个文件,那就需要30秒才能将这三个文件全部生产完毕。

假设一个问题,我们需要生成3个文件,每一个文件生成都需要10秒钟(当然,现实生活中很少有机会遇到一个文件要生成10秒的,只是为了说明多线程而假设)。如果我们写一个for循环,每次循环生成一个文件,那就需要30秒才能将这三个文件全部生产完毕。
  不难发现,这个程序是单线程的,所以需要的执行时间相对较常。如果我们能让这三个文件同时生成,那不就只需要10秒就能完成全部文件的生成吗?下面来看下实现该功能的代码:
  file_test2.php


   
  echo time();
  for($i=1;$i<=3;$i++)
  {
    $fp=fsockopen('localhost',80,&$errno,&$errstr,5);
    fputs($fp,"GET /1.php?id={$i}\r\n"); 
    fclose($fp);
  }
  ?>

  1.php


 
  sleep(10);
  fopen('d:\\wamp\\www\\2\\'.time().'_'.$_GET['id'].'.txt','w');
  ?>
  执行代码大家就会发现,这三个文件生成时间都是一样的,节约了三分之二的执行时间。但是这样做有一个不足地方,就是并发的这3个进程是不可控的,假设是负责一点的程序,就算跑死了你也不知道,就算知道了也kill不掉。但这是php的机制造成的,也没有办法。

推荐阅读
author-avatar
沈智强619
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有