社区
基础编程
帖子详情
php并发问题
h420943302
2012-12-19 04:56:42
最近有个项目,需要处理大量数据,一个进程下来需要大量时间,我就想着php能不能并发处理,如果能,要怎么弄? 问度娘,有个stream_select 函数 这个函数 懂得 能解释 举例一下吗
...全文
320
15
打赏
收藏
php并发问题
最近有个项目,需要处理大量数据,一个进程下来需要大量时间,我就想着php能不能并发处理,如果能,要怎么弄? 问度娘,有个stream_select 函数 这个函数 懂得 能解释 举例一下吗
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
an9ryfr09
2012-12-21
打赏
举报
回复
我拿文件来说只是举个例子,你循环调用1万次这个函数,那么你开1w个进程,每个进程只调用一次,就实现并发的目的了。 就像楼上老大说的,你如果需要等待返回结果,根据这个结果才能再执行下一次循环,那么就必须阻塞。否则就会造成数据一致性的问题。我举那个1000个文件的例子,是因为读写这1000次并没有绝对的依存关系。所以可以并发进行。 如果不需要,那你完全可以开10000个进程每个进程调用一次。当然具体开多少个进程这个要根据很多因素来考虑,并不是开的越多越好。一般来说进程数量 = cpu核心数量最佳。 至于怎么开多进程(php本身在windows上没法实现多线程,linux下到是可以借助系统来实现)。不是说让你开n个浏览器页面,你去查一下php cli模式。我们只是提供思路。具体如何拆分任务还是要最了解业务逻辑的你来思考。
an9ryfr09
2012-12-21
打赏
举报
回复
给你敲那么多字,最后就落了这么一句话。ok,你继续等实在的吧。
h420943302
2012-12-21
打赏
举报
回复
都说的很虚,没点实在的。。
夏之冰雪
2012-12-21
打赏
举报
回复
可否像压力测试那样,模拟并发就好了。
acabin
2012-12-21
打赏
举报
回复
你要做的这个更类似于队列消息 一个主进程负责调度 生成子进程具体执行 这方面的算法很多,上网找找即可
ImN1
2012-12-20
打赏
举报
回复
*nix平台有多线程,请查阅手册 其他平台需要借助web服务器的多线程 记忆中php也有函数能对他太多的进程进行拒绝,没做过相关项目,所以没研究,只是看过手册
xuzuning
2012-12-20
打赏
举报
回复
那么你调用函数,是否需要得到返回结果? 如果不需要(当然这就不是函数了),你可以开多个进(线程)来完成 如果需要,则必须等待结果的返回
h420943302
2012-12-20
打赏
举报
回复
亲们 现在是一个文件 不是1000个文件 我现在的意思 差不多 是这样 一个函数a 然后有1w个数据 循环调用 1w次这个函数a 如果调用 一次这个函数a需要1s 那么单发就需要1ws 现在就想着并发 比如 分成 2个 并发同时进行 一个是 1-5000的数据循环调用a 一个是5001-1w的数据循环调用a 这样理论上时间 变为5000s 依次类推 分成1000个并发进行 怎么实现 并发调用这个函数
an9ryfr09
2012-12-20
打赏
举报
回复
开多个进程就行了。不过你要自己根据业务逻辑,将任务拆分。 比如你现在的程序要从1读到第1000个文件,然后将所有文件的内容统一写入到一个新文件newfile中。 单进程的话,你肯定是做个1到1000的循环,读一个文件,就取新文件中追加一次。 如果我开两个进程,就可以让进程一从第1个文件循环读到第500个文件,进程二从501个文件读到第1000个。这样等于就把一个大任务拆成两个任何并行执行了。在多cpu或多核心的机器上,理论上效率提高了一倍。 但你要解决好并发写入的问题。因为两个进程都在同时向newfile写数据,一定会引发冲突,为了让他们写入文件无阻塞,所以最好不用文件锁。可以让两个进程都先写入一个临时文件(newfile1.tmp、newfile2.tmp...),等两个进程都执行完毕后,再将两个临时文件合并。 当然,如果你开3个进程,理论上效率就提高了3倍,以此类推。 这其实就是进程管理的知识。实际应用中,光有一堆子进程是不行的,你需要有一个主进程来对这些子进程进行调度、和管理。比如最后那个将所有临时文件合并的工作就应该由主进程来做,因为只有它能知道何时所有进程执行完毕。其实多线程也是这样的工作原理。
NightWish1987
2012-12-19
打赏
举报
回复
引用 5 楼 h420943302 的回复:
是处理数据。。
我们目前项目里的积分系统是这样的!凡是加积分的操作,统一存库里,有一个表是积分记录表! 另一个表是存储总积分的! 后台有一个php的线程在运行,就是专门计算积分记录表里的数据,然后存到总积分的表里 这是在linux下
h420943302
2012-12-19
打赏
举报
回复
是处理数据。。
NightWish1987
2012-12-19
打赏
举报
回复
不太明白你说的是一个怎么样的并发! 如果单单的是统计数据的话,在linux下可以使用死循环来执行!然后使用php命令来执行,你的那个死循环文件或者是使用计划任务!! 统计好的数据写入一个结果表里,然后直接读结果就ok了
床上等您
2012-12-19
打赏
举报
回复
引用 2 楼 h420943302 的回复:
如果我要1000个任务同时进行 是不是要设计并同时打开1000个web页面,那还不恶心死
手工原始是这样,而且要同时请求,即同时刷新。。你做得到? 所以有了工具,ab/loadrunner
h420943302
2012-12-19
打赏
举报
回复
如果我要1000个任务同时进行 是不是要设计并同时打开1000个web页面,那还不恶心死
床上等您
2012-12-19
打赏
举报
回复
web就是并发的啊。只是最高承受并发量是多少而己。 可以用apache的ab来测一下,专业一点的用loadrunner这类工具来测
php
如何解决
并发
问题
,
PHP
如何解决
并发
问题
本文介绍了在
PHP
中处理
并发
问题
的三种方法:1) 使用文件锁通过flock()函数实现资源的互斥访问;2) 利用序列化接口对对象进行序列化和反序列化,确保数据一致性;3) 使用SQL的select...for update语句在数据库层面实现行级锁,避免
并发
时的数据冲突。这些方法有助于在多进程环境下保证数据的正确性和事务的完整性。
php
语言
并发
不好,
PHP
中
并发
问题
的解决方法
本文介绍了在
PHP
中处理
并发
问题
的两种方法:利用Redis的事务特性进行原子更新,以及借助文件排他锁实现阻塞模式的
并发
控制。通过示例代码详细展示了如何使用Redis事务处理
并发
请求,以及如何使用文件锁避免
并发
冲突。这两种方法旨在确保数据的一致性和完整性。
三个方法解决
php
并发
问题
文章介绍了使用MySQL的行级锁和乐观锁,以及Redis的分布式锁来解决
PHP
并发
问题
。通过开启事务、设置锁和使用特定的更新策略,确保在高
并发
环境下的数据一致性。,
php
面对
并发
注意,
PHP
解决
并发
问题
的几种实现
本文探讨了
PHP
在处理
并发
场景下如何避免超卖
问题
,提出了四种解决方案:使用文件锁、MySQL悲观锁、队列和Redis原子操作。通过加锁确保
并发
控制,防止库存异常,详细阐述了每种方案的实现方式及其适用场景。
基础编程
21,889
社区成员
140,333
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章