通过php的Socket方式实现php程序的多线程。php本身是不支持多线程的,那么如何在php中实现多线程呢?可以想一下,WEB服务器本身都是支持多线程的。每一个访问者,当访问WEB页面的时候,都将调用新的线程,通过这一点我们可以利用WEB服务器自身的线程来解决PHP不支持多线程的问题。

下面给出通过 fsockopen() 建立socket连接,然后用 用fputs() 发送消息,来实现的PHP多线程类代码:

$fp=fsockopen($_SERVER['HTTP_HOST'],80,&$errno,&$errstr,5);

if(!$fp){

echo "$errstr ($errno)

\n";

}

fputs($fp,"GET $_SERVER[PHP_SELF]?flag=1\r\n");

fclose($fp);

上面这段代码只是一个线程的操作过程。多进行几个这样的操作就是多线程了。目前所谓PHP的多线程程序都是基于这个方式的。

下面给一个完整的线程类代码。

*/

class thread {

var $count;

function thread($count=1) {

$this->count=$count;

}

function _submit() {

for($i=1;$i<=$this->count;$i++) $this->_thread();

return true;

}

function _thread() {

$fp=fsockopen($_SERVER['HTTP_HOST'],80,&$errno,&$errstr,5);

if(!$fp){

echo "$errstr ($errno)

\n";

}

fputs($fp,"GET $_SERVER[PHP_SELF]?flag=1\r\n");

fclose($fp);

}

function exec($func) {

isset($_GET['flag'])?call_user_func($func):$this->_submit();

}

}

//应用例子:

$th=new thread(10);//10个线程

$th->exec('demo');//执行行自定义的函数

function demo() {

fopen('data/'.microtime(),'w');

}

?>

http://codechina.spaces.live.com/blog/cns!bca6db10a924c24!575.entry

以上就介绍了php 实现多线程,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php 编写线程教程,php 实现多线程相关推荐

  1. java 编写线程公共类_002-java多线程工具类

    packagecom.HM.eis.commons.multiThread;importjava.io.Serializable;importcom.alibaba.fastjson.JSON;/** ...

  2. 编写一个Java程序实现多线程,在线程中输出线程的名字,隔300毫秒输出一次,共输出20次。

    编写一个Java程序实现多线程,在线程中输出线程的名字,隔300毫秒输出一次,共输出20次. 一.ThreadDemo class ThreadDemo extends Thread {public ...

  3. python 多线程 setdaemon_python使用Thread的setDaemon启动后台线程教程

    多线程编程当中, 线程的存在形态比较抽象. 通过前台线程后台线程, 可以有效理解线程运行顺序.(复杂的多线程程序可以通过设置线程优先级实现) 后台线程与前台线程的直接区别是, 1)setDaemon( ...

  4. 同软件多个线程设置不同ip_多线程--面试知识

    一.什么是进程? 软件需要安装操作系统之上,软件安装之后,需要找到核心的启动文件来运行软件. 运行软件:就是让软件执行,其实是将软件中的程序从硬盘加载到内存中,在内存中开辟当前软件所需要的内存空间,而 ...

  5. java线程知识梳理_Java多线程——多线程相关知识的逻辑关系梳理

    1 学习多线程知识的根本目标 多线程知识的根本目标是:设计稳健的并发程序. 当然,本文无法回答这个实践性很强的问题(这与具体的业务相关,涉及到具体的策略),本文主要阐述相关知识之间的关系,希望初学者不 ...

  6. java线程创建销毁_c++多线程的创建挂起执行与销毁

    资源简介 1. 创建一个基于对话框的应用程序.并增加如图所示控件:分别为3个进度条控件关联三个进度条类型的变量:并在对话框的初始化函数中,设定进度条的范围:为编辑框关联一个整型的变量:为12个按钮添加 ...

  7. Redis新特性、剖析线程模型(单线程与多线程)

    一. Redis6.0 新特性 1. 多线程IO redis6.0引入多线程IO,只是用来处理网络数据的读写和协议的解析,而执行命令依旧是单线程,所以不需要去考虑set/get.事务.lua等的并发问 ...

  8. java基础线程_Java基础之多线程没那么复杂!

    多线程的引入 1.什么是多线程 线程是程序执行的一条路径,一个进程中可以包含多条线程;多线程并发执行可以提高程序的效率 2.进程和线程之间的关系 操作系统可以同时执行多个任务,每个任务就是进程;进程可 ...

  9. 【Java_多线程并发编程】基础篇—线程状态及实现多线程的两种方式

    1.Java多线程的概念 同一时间段内,位于同一处理器上多个已开启但未执行完毕的线程叫做多线程.他们通过轮寻获得CPU处理时间,从而在宏观上构成一种同时在执行的假象,实质上在任意时刻只有一个线程获得C ...

最新文章

  1. nyoj--891--找点(贪心)
  2. 惠普武汉实习生面试-20110320
  3. javaweb(三十八)——mysql事务和锁InnoDB(扩展)
  4. Shared Event-loop for Same-Origin Windows(译)
  5. 网络聊天室的技术与发展
  6. 如何在命令行下运行kettle的作业(job)和转换(transform)
  7. Codeforces Round #371 (Div. 2)
  8. 2345 网址导航劫持 解决办法
  9. coreseek java_使用python测试sphinx(coreseek)做全文索引
  10. 使用MySQL now函数的坑
  11. 智能(语音)对话系统架构研究
  12. cout 输出 uint8_t 整形值
  13. 转换金额为大写人民币-Java
  14. 【原创】从BZOJ2683 简单题中 整 CDQ分治解决三维偏序
  15. 《卓有成效的管理者》——学习心得(四)
  16. kubernetes云原生纪元:共享存储-PVPVC(上)
  17. 关于图灵JAVA一百道面试题总结
  18. C++ 时间戳 时间相关函数
  19. pycharm one dark主题设置及下载
  20. Deer计划(2)cloudcompare解析--八叉树

热门文章

  1. L. Coordinate Paper(CCPC 长春)构造
  2. P4590 [TJOI2018]游园会 dp套dp + 状态机
  3. 【AGC035C】Skolem XOR Tree【异或】【构造】
  4. 51nod1355-斐波那契的最小公倍数【min-max容斥】
  5. P2633-Count on a tree【主席树,LCA】
  6. P3538-[POI2012]OKR-A Horrible Poem【hash,字符串】
  7. Codeforces Round #671 (Div. 2)
  8. 洛谷P2501数字序列 动态规划
  9. 常用公有云接入——阿里
  10. JavaFX官方教程(十三)之应用效果