php实现多线程的方式
来源:互联网 发布:爱宝软件 编辑:程序博客网 时间:2024/06/04 23:22
php多线程
呵呵哒,
项目情况:
要同步300W+的用户数据到qcloud,只能每次一个curl同步,大概每秒同步3个,算下来同步完300W数据估计要10天+,所以想到用多线程解决。
方案1:
用c++写多进程方案,fork多个进程出来解决。主线程负责读取/存储数据,子线程负责curl。
方案2:
用php写多进程方案,同方案1.主线程读取,子线程curl。
但是由于php没有多进程,不能直接操控线程/进程。所以只能依赖于linux来实现多进程。
php函数pcntl_fork()可以创建进程,等同于linux的fork。
和fork不同的是,pcntl_fork返回的0是子进程,返回的id是子进程的pid(而fork是父进程返回0,子进程返回ppid).
注意pcntl_fork()函数必须要在linux上面才行,据说要加载pcntl.so模块,但貌似不加载也行。
方案3:
php+shell模拟多线程
例如:test.php文件实现了项目所需功能(包含数据库读写和curl)
再写一份shell如下,保存为start.sh:
#!/bin/bash //指定bash,必须for(( i=0; i<20; i++))do php test.php & //执行test.php,&符号的意思是把该操作放在后台执行,这样shell就可以继续执行下一步sleep命令了。如果没有这个符号,shell会阻塞在这里。 sleep 1sdone
最后执行该shell,sudo ./start.sh
shell会启动20个进程同时分别执行test.php
但是由于每个进程都相当于主进程,所以共同的资源不好控制,这个case中,共同的资源只有数据库,所以每次操作数据库我都加锁详见我另一篇文章。mysql lock。
因为相对于数据库操作基本都是每秒能解决,而curl连续发个几百个需要几十秒甚至更多,所以数据库加锁影响不大。
0 0
- php实现多线程的方式
- 多线程的实现方式
- 多线程的实现方式
- 多线程的实现方式
- 多线程的实现方式
- java实现多线程的方式
- java多线程的实现方式
- Java多线程的实现方式
- Java多线程的实现方式
- java 实现多线程的方式
- 多线程程序实现的方式
- Android多线程的实现方式
- Java实现多线程的方式
- Java 实现多线程的方式
- 多线程同步实现的方式
- UE4--多线程的实现方式
- java多线程-实现多线程的方式
- 多线程之一 实现多线程的方式
- mac Navicat破解安装
- github提交已存在的项目
- 显示窗口
- Untangling Apache Hadoop YARN, Part 1: Cluster and YARN Basics
- 前端复习--http code
- php实现多线程的方式
- U-boot porting guide
- Android 回调用法个人分享
- 百度首页打不开,但其他网页可正常访问
- 成员变量和局部变量的区别
- 进程调度和页面置换
- c++primer(第五版)3.17
- 卸载窗口类
- RGB颜色对照表