php多线程 进行运算调度的最小单位

网友分享于:2018-07-06 13:26 发表在 PHP

学习php这门计算机语言,我们需要从多个方面来进行学习。首先就是要学习语法,其次学习php多线程知识。学习多线程,能够加深我们对计算机语言的理解。接下来,就让如果零 if0.CN的小编来讲解一下php多线程。

图片 1.png

  php多线程 进行运算调度的最小单位

  第一种解决方法:

  $count=count($emailarr);

  for($i=0;$i

  {

  sendmail(.....);//发送邮件

  }

  ?>

  这段代码用户体验极差,也无法实际运用,首先发送这么多邮件会产生服务器运行超时,其实漫长的用户等待时间会让用户对系统产品怀疑和失去信心。但是用户不需要等待到1000封邮件都发送完毕了才提交发送成功,我们完全可以提交后台后直接给用户提示发送成功,然后让后台程序静默依次发送。

  第二种解决方法:

  我们尝试使用异步执行技术来执行代码,异步执行的特点是后台静默执行,用户无需等待代码的执行结果,使用异步执行的好处:

  1.摆脱了应用程序对单个任务的依赖性

  2.提高了程序的执行效率

  3.提高了程序的扩展性

  4.在一定场景提高了用户体验

  5.因为PHP不支持多线程,使用异步调用的请求多个HTTP的方式达到了程序并行执行效果,但是注意的是请求的HTTP过多的话,会大大加大了系统的开销

  用户体验:用户等待->发送完毕

  然后把发信任务转给了一个单独处理发信的php程序处理了,当用户看见发送完毕的时候其实信还没发送

  $domain="www.***.com";

  $url="/system_mail.php";

  $par="email=".implode(',',$emailarr)."&........";

  $header = "POST $url HTTP/1.0rn";

  $header .= "Content-Type: application/x-www-form-urlencodedrn";

  $header .= "Content-Length: " . strlen($par) . "rnrn";

  $fp = @fsockopen ($domain, 80, $errno, $errstr, 30);

  fputs ($fp, $header . $par);

  fclose($fp);

  echo ''发送完毕';

  ?>

  system_mail.php

  ini_set("ignore_user_abort",true);

  ignore_user_abort(true);//此处的代码需要php.ini开启相关的选项,保证php执行不超时的,不明白,参考我的另一篇文章关闭浏览器后,php脚本会不会继续运行

  //获取email地址,发信,此处为发信代码

  ?>

图片 2.png

php多线程  进行运算调度的最小单位

  第三种方法:

  1.最简单的办法,就是在返回给客户端的HTML代码中,嵌入AJAX调用,或者,嵌入一个img标签,src指向要执行的耗时脚本。

  这种方法最简单,也最快。服务器端不用做任何的调用。

  但是缺点是,一般来说Ajax都应该在onLoad以后触发,也就是说,用户点开页面后,就关闭,那就不会触发我们的后台脚本了。

  而使用img标签的话,这种方式不能称为严格意义上的异步执行。用户浏览器会长时间等待php脚本的执行完成,也就是用户浏览器的状态栏一直显示还在load

  当然,还可以使用其他的类似原理的方法,比如script标签等等。

  以上就是关于php多线程的相关介绍,php多线程的学习,对于理解php有着更好的加深作用。相信你对这方面的内容还意犹未尽,快点击收藏如果零 if0.CN,了解更多。

推荐分类: Web开发 Web前端 HTML/CSS PHP ASP JavaScript jQuery HTML5 vbScript Ajax 网页设计 跨浏览器开发 高性能WEB开发 Web Service XML/SOAP CGI
推荐标签: php websocket input navicat finereport
相关文章
最新发表
热门推荐