PHP pthread 多线程 案例
<?php
/**
*检测http服务是否可以正常访问
*启动三个线程执行任务
*/
class taskWork extends Thread
{
public $url = ''; //检测任务URl
public $name = '';
public $thread_id = '';
public $is_runing = true; //运行标志
public function __construct($name)
{
$this->name = $name;
}
public function run()
{
while($this->is_runing)
{
if(!empty($this->url)) //判断当前进程是否存在任务
{
echo "线程:[{$this->name}]正在处理 URL:[{$this->url}]\r\n";
$t1 = microtime(true);
$httpcode = $this->httpcode($this->url);
$t2 = microtime(true);
$t = $t2-$t1;
if($httpcode == 200)
{
echo "URL:[{$this->url}] 处理结果 正常 请求时间{$t}\r\n";
}else{
echo "URL:[{$this->url}] 处理结果 异常 请求时间{$t}\r\n";
}
$this->url = ''; //任务执行完 清空
}else{
echo "线程:[{$this->name}]等待任务....\r\n";
}
sleep(1);
}
}
public function httpcode($url){ $ch = curl_init();
$timeout = 3;
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch,CURLOPT_URL,$url);
curl_exec($ch);
$httpcode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch);
return $httpcode;
}
} $urls=[
'https://www.1.com',
'https://www.2.com',
'https://www.3.com',
'https://www.baidu.com',
'https://www.163.com',
'https://www.qq.com',
'https://www.www.sina.com.cn',
'https://www.51cto.com',
'https://www.9.com',
'https://www.0.com',
]; $threads[] = new taskWork('thread_1');
$threads[] = new taskWork('thread_2');
$threads[] = new taskWork('thread_3');
/**
*创建三个线程
*如果不希望在thread->start()后就运行程序
*就执行$thread->wait()后线程并不会立即运行
*收到 $thread->notify()信号后才运行程序
*/
foreach($threads as $thread)
{
$thread->start();
}
//线程派发任务
for($i = 1; $i<10; $i++)
{
while (true) {
foreach ($threads as $worker) {
if ($worker->url=='') {
$worker->url = array_pop($urls); //给每个人线程派发任务
echo "线程:[{$worker->name}]空闲,放入参数{$worker->url}\r\n";
break 2;
}
}
sleep(1);
}
}
echo "所有线程派发完毕,等待执行完成.\r\n"; while (count($threads)) {
foreach ($threads as $key => $thread) {
if ($thread->url == '') {
echo "[{$thread->name}]线程运行完成,空闲 退出.\r\n";
$thread->is_runing = false; //停止线程运行标志
unset($threads[$key]);
}
}
echo "等待中其他线程完成...\r\n";
sleep(1);
}
PHP pthread 多线程 案例的更多相关文章
- pthread多线程编程的学习小结
pthread多线程编程的学习小结 pthread 同步3种方法: 1 mutex 2 条件变量 3 读写锁:支持多个线程同时读,或者一个线程写 程序员必上的开发者服务平台 —— DevSt ...
- C#多线程案例基础
C#多线程案例基础(转) 在学习多线程之前,我们先来看几个概念: 1,什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源,当然一个程序也可能开 ...
- VC++6.0 下配置 pthread库2010年12月12日 星期日 13:14VC下的pthread多线程编程 转载
VC++6.0 下配置 pthread库2010年12月12日 星期日 13:14VC下的pthread多线程编程 转载 #include <stdio.h>#include &l ...
- Java 多线程案例
同步代码块 SynchronizedTest类,用来表示取票功能 package concurency.chapter6; public class SynchronizedTest implemen ...
- C语言使用pthread多线程编程(windows系统)二
我们进行多线程编程,可以有多种选择,可以使用WindowsAPI,如果你在使用GTK,也可以使用GTK实现了的线程库,如果你想让你的程序有更多的移植性你最好是选择POSIX中的Pthread函数库,我 ...
- clone的fork与pthread_create创建线程有何不同&pthread多线程编程的学习小结(转)
进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合,这些资源在Linux中被抽 象成各种数据对象:进程控制块.虚存空间.文件系统,文件I/O.信号处理函数.所以创建一个进程的 过程就是这 ...
- 多线程案例:龟兔赛跑-Race
多线程案例:龟兔赛跑-Race 前置条件: 首先来个赛道距离,然后要离终点越来越近 判断比赛是否结束 打印出胜利者 龟兔赛跑开始 故事中是乌龟赢了,兔子需要睡觉,所以我们来模拟兔子睡觉 乌龟赢得比赛 ...
- NDK中使用pthread多线程中自己写的一个BUG
在使用pthread进行NDK中的多线程开发时,自己写了一个BUG, void *darkGrayThread(void *args) { ThreadParam *param = (ThreadPa ...
- php Pthread 多线程 Worker
<?php //PHP 高级编程之多线程 http://www.netkiller.cn/journal/thread.php.html#idp57489856 //worker 是一个具有持久 ...
随机推荐
- 18.4 #if 0…endif的用途
#if 0 ... #endif的作用跟/*...*/的作用是一样的,就是注释! 可是为什么不用注释符号/*? 答:为了解决嵌套注释.如下: #include“stdio.h” int mai ...
- Python手记(二)
1.map函数 map函数用于将指定的数据成员都使用指定函数进行处理. 比如: map(float, arr) map(square, arr) 这两个函数分别将arr中成员转换为float类型,以及 ...
- python设置路径值时为什么要输入r
r:代表处理不转义现象 Python中,u表示unicode string,表示使用unicode进行编码,没有u表示byte string,类型是str,在没有声明编码方式时,默认ASCI编码.如果 ...
- G1回收算法
待完善...... 参考: https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653193390&idx=2&sn= ...
- 几种不同格式的json解析
原文地址:http://blog.csdn.net/whx405831799/article/details/42171191 给服务端发送请求后,服务端会返回一连串的数据,这些数据在大部分情况下都是 ...
- 利用MYSQL的函数实现用户登录功能,进出都是JSON(第一版)
以HMAC密钥形式发放密钥令牌 功能如下 1:记录用户的登录的IP地址.时间 2:实现密码错误次数超限后锁定,并提示何时解锁 CREATE DEFINER=`root`@`%` FUNCTION `u ...
- android selector shape 使用
先上效果图 message_toolbar_left_bg_selector <?xml version="1.0" encoding="utf-8"?& ...
- 干掉hao123劫持浏览器主页
原因可能是安装某个软件流氓捆绑了IE主页导致的,建议这样尝试: 一.如果安装有三方安全防护类软件,排查流氓软件,建议运行系统自带的Windows Defender或者MSE程序扫描系统. 二.如果有检 ...
- PHP chdir函数:改变当前的目录
PHP chdir函数的作用是改变当前的目录,这里主机吧详细介绍下chdir函数的用法,并列举使用chdir函数的例子. chdir定义和用法: chdir() 函数改变当前的目录. chdir实例: ...
- python——元组和字典类型简明理解
元组类型: 元祖创建: 不需要括号可以但是一个元素就当成了字符串类型了 >>> tup1="a"; >>> type(tup1) <cla ...