实例讲解php实现多线程
我们首先来看一个示例
<?php class execMulti { function MultithreadTest { exec("php static_massive.php > /dev/null &"); echo "处理完成了"; } } ?>
当执行上述操作时,即使在耗时的处理结束之前也显示处理完成。
exec("php static_massive.php > /dev/null &");
由于“ > / dev / null& ”返回的值丢失,我们不会等待响应。
因此,处理完成指示比耗时处理更快。
但是,该方法不知道耗时的处理何时结束。
不要忘记考虑采取日志的执行,登录DB等方法向用户传递执行结果。
用于多线程的方法(pthreads)
最后,介绍使用PHP扩展模块pthreads的方法。
它可以比上面使用exec的方法更简单。
①配置环境并安装php
请使用vagrant等准备喜欢的环境。
php 需要使用线程安全版本,这是多线程和安全的实现。
从官方下载线程安全版本的 PHP。
访问以下内容并从图中的红框下载。
http://www.php.net/downloads.php
此外,对于线程安全安装,您需要使用configure选项指定-enable-maintainer-zts。
./configure --enable-maintainer-zts
根据需要,也可以安上Apache和mysql的选项。
用以下命令确认了php的版本就可以了。
php -v
②pthreads的安装
我们来下载zip格式。
https://github.com/krakjoe/pthreads/archive/master.zip
解压zip,移动到解压缩文件,然后执行phpize。
如果您在PHP模块列表上运行pthreads,则可以执行以下操作。
php -m
根据环境的不同,这一块的设定也会有所不同,可以用环境名+pthreads等进行检索来寻找信息。
③尝试使用多线程
示例如下
<?php class pthreadsTest extends Thread { public function run () { sleep(5); } } $ts1 = new pthreadsTest(); $ts1->start(); $ts2 = new pthreadsTest(); $ts2->start(); ?>
因为sleep(5)被调用两次,所以需要10秒,但实际上它将是5秒。
相关推荐
-
php多线程并发实现方法
本文实例讲述了php多线程并发实现方法.分享给大家供大家参考,具体如下: 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()
-
PHP多线程模拟实现秒杀抢单
应集团要求给服务号做了个抢单秒杀的功能,需要对秒杀做个测试,想试试PHP多线程,就模拟了下抢单功能. 先说秒杀模块的思路: 正常情况下的用户秒杀操作 1.发起秒杀请求 2.进入秒杀队列 3.随机滞后 1 - 2 秒进行秒杀结果查询请求(算是变相分流吧) 4.成功则生成订单 5.返回结果 以下是模拟秒杀的代码: <?php set_time_limit(0); /** * 线程的执行任务 */ class Threadrun extends Thread { public $url; public
-
php与python实现的线程池多线程爬虫功能示例
本文实例讲述了php与python实现的线程池多线程爬虫功能.分享给大家供大家参考,具体如下: 多线程爬虫可以用于抓取内容了这个可以提升性能了,这里我们来看php与python 线程池多线程爬虫的例子,代码如下: php例子 <?php class Connect extends Worker //worker模式 { public function __construct() { } public function getConnection() { if (!self::$ch) { sel
-
PHP7多线程搭建教程
一直想写个爬虫,于是就用PHP写了一个,众所周知PHP并不支持多线程,所以爬行效率很低,同时运行10个进程,内存和CPU占用率很高,开大概10个进程爬行,对爬行时间还进行优化,但我的mac pro还是差不多就down掉了. 于是开始采用PHP7结合pthreads多线程工具,经测试,稳定性.效率.内存和cpu的占用各方面都很满意. 下边就介绍PHP7的多线程环境搭建. 安装PHP7 以下所有命令在root用户下执行 下载PHP7,目前最新版本是7.0.3,根据情况自行选择版本,PHP5.4以后的
-
PHP中多线程的两个实现方法
PHP本身是不是支持多线程的,不过我们可以借助其他的方法来实现多线程,比如 shell 服务,比如 web 服务器,本文我们来讲讲这两个方法如何实现.需要的朋友可以来参考一下. 多线程是java中一个很不错的东西,很多朋友说在php中不可以使用PHP多线程了,其实那是错误的说法PHP多线程实现方法和fsockopen函数有关,下面我们来介绍具体实现程序代码,有需要了解的同学可参考. 当有人想要实现并发功能时,他们通常会想到用fork或者spawn threads,但是当他们发现php不支持多线程
-
php使用curl_init()和curl_multi_init()多线程的速度比较详解
本文实例讲述了php使用curl_init()和curl_multi_init()多线程的速度比较.分享给大家供大家参考,具体如下: php中curl_init()的作用很大,尤其是在抓取网页内容或文件信息的时候,例如之前文章<php使用curl获取header检测开启GZip压缩>就介绍到curl_init()的强大. curl_init()处理事物是单线程模式,如果需要对事务处理走多线程模式,那么php里提供了一个函数curl_multi_init()给我们,这就是多线程模式处理事务的函数
-
实例讲解spring boot 多线程
Spring 通过任务执行器(TaskExecutor)来实现多线程和并发编程.使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor.而实际开发中任务一般是非阻塞的,即异步的,所有我们在配置类中通过@EnableAsync开启对异步任务的支持,并通过在实际执行的Bean的方法中使用@Async注解来声明其是一个异步任务. 一.配置类 package com.cenobitor.taskxecutor.config; import org.springfr
-
实例讲解php实现多线程
我们首先来看一个示例 <?php class execMulti { function MultithreadTest { exec("php static_massive.php > /dev/null &"); echo "处理完成了"; } } ?> 当执行上述操作时,即使在耗时的处理结束之前也显示处理完成. exec("php static_massive.php > /dev/null &");
-
基于多线程中join()的用法实例讲解
Thread中,join()方法的作用是调用线程等待该线程完成后,才能继续用下运行. public class TestThread5 { public static void main(String[] args) throws InterruptedException { Runner0 run5 = new Runner0(); Thread th5 = new Thread(run5); th5.start(); th5.join();//join()方法用在此处是为了等待主线程结束后运
-
多线程(多窗口卖票实例讲解)
实现多线程的方式: 实现多线程的方式有多种,这里只列举两种常用的,而第一种继承Thread的方式无法实现多窗口卖票. 一,继承Thread方式: 特点:多线程多实例,无法实现资源的共享. 例子: package com.demo.study.multithreading; public class MyThread extends Thread{ private int i = 10; // 可以自行定义锁,也可以使用实例的锁 Object mutex = new Object(); publi
-
java多线程学习之死锁的模拟和避免(实例讲解)
1.死锁 死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放.由于线程被无限期地阻塞,因此程序不可能正常终止. Java 死锁产生的四个必要条件: 1.互斥使用,即当资源被一个线程使用(占有)时,别的线程不能使用 2.不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放. 3.请求和保持,即当资源请求者在请求其他的资源的同时保持对原有资源的占有. 4.循环等待,即存在一个等待队列:P1占有P2的资源,P2占有P3的资源,P3占有P1的
-
Java 多线程实例讲解(一)
Java多线程(一) 多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的. 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上图中基本上囊括了Java中多线程各重要知识点.掌握了上图中的各知识点,Java中的多线程也就基本上掌握了.主要包括: Java线程具有五中基本状态 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread(); 就绪状态(Runnable):当调用线程对象的
-
python3爬虫GIL修改多线程实例讲解
我们打开程序后,会发现电脑的内存和cpu发生了变化.在对于前者上面,自然是希望内容占用小,cpu的利用越高越好.那有没有什么方法可以让我们的cpu达到满状态的运行效果呢?这就得用到我们所学的多线程中的知识了,再正式开始讲解之前,我们先来说说操作的思路吧,然后进行代码对比. 我们都知道,比方我有一个4核的CPU,那么这样一来,在单位时间内每个核只能跑一个线程,然后时间片轮转切换.但是Python不一样,它不管你有几个核,单位时间多个核只能跑一个线程,然后时间片轮转.看起来很不可思议?但是这就是GI
-
C语言实现多线程定时器实例讲解
1. 大致功能介绍 实现任务列表,定时器会间隔一段时间遍历列表发现要执行的任务 任务列表中的所有任务并行执行 每个任务都可以有自己的定时器,并且可以选择是否要重复执行 定义方便的任务函数实现接口 定时器可以由用户自定义何时启动和停止 提供等待功能,保证任务列表中的所有任务执行完成 提供任务列表的传参功能 2. API库介绍 void setTick(int val); 设置定时间的间隔时间tick,若设置tick为1000,且任务的定时器时间为1000,则任务会在1秒后执行,默认tick为1秒,
-
java多线程数据分页处理实例讲解
在数据的最终结果上,我们能够通过分类的方法,准备的筛选出不同类别结果的信息.这里我们发散一下思维,在Java中对于数据大量处理的,多线程是一个非常常见的代表,我们可以用分页来处理多线程的数据问题.下面我们对分类的类型进行了解,然后带来两种分页在多线程的逻辑. 1.常见的分页类型 传统的:采用传统的分页方式,可以明确的获取数据信息,如有多少条数据,分多少页显示等. 下拉式:采用下拉式的分页方式,一般无法获取明确的数据数量相关的信息,但在分页操作以后,仍然可以看到之前查询的数据. 2.分页式查询逻辑
-
log4j2日志异步打印(实例讲解)
log4j2支持日志的异步打印,日志异步输出的好处在于,使用单独的进程来执行日志打印的功能,可以提高日志执行效率,减少日志功能对正常业务的影响. 异步日志在程序的classpath需要加载disruptor-3.0.0.jar或者更高的版本. Asynchronous Loggers是一个新增特性在Log4j 2 ,可以实现完全异步也可以和同步混合使用,还可以只异步化Appender,以提升系统性能,官方数据显示混合没有完全异步化效果好. 1,完全异步模式: 这种异步日志方式,不需要修改原来的配
随机推荐
- Node.js实现发送邮件功能
- jQuery的ajax中使用FormData实现页面无刷新上传功能
- redis中使用java脚本实现分布式锁
- Java基本数据类型与封装类型详解(int和Integer区别)
- Spring Data JPA中的动态查询实例
- asp.net在iframe中弹出信息并执行跳转问题探讨
- 微信access_token的获取开发示例
- smarty模板引擎中变量及变量修饰器用法实例
- MySQLdb ImportError: libmysqlclient.so.18解决方法
- 多个jsp页面共享一个js对象的超级方法
- JS操作字符串转换为数值并取整的代码
- JS区分Object与Aarry的六种方法总结
- yii2.0整合阿里云oss上传单个文件的示例
- Javascript实现获取及设置光标位置的方法
- linux jexus服务设置开机启动
- js中split函数的使用方法说明
- 详解spring security 配置多个AuthenticationProvider
- .NET(C#):Emit创建异常处理的方法
- 使用python进行服务器的监控
- Python pymongo模块用法示例