社区
基础编程
帖子详情
php并发问题
h420943302
2012-12-19 04:56:42
最近有个项目,需要处理大量数据,一个进程下来需要大量时间,我就想着php能不能并发处理,如果能,要怎么弄? 问度娘,有个stream_select 函数 这个函数 懂得 能解释 举例一下吗
...全文
321
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、文件锁如果对该表的更新或插入只有一个文件,这种方式是可以解决的实现方式如下:public static functioncbInventoryReserve() {$LOCK_FIL...
php
语言
并发
不好,
PHP
中
并发
问题
的解决方法
PHP
中
并发
问题
的解决方法发布时间:2020-06-28 12:01:00来源:亿速云阅读:88作者:Leah本篇文章为大家展示了
PHP
中
并发
问题
的解决方法,代码简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、使用队列,额外起一个进程处理队列,
并发
请求都放到队列中,由额外进程串行处理,
并发
问题
就不存在了,但是要额外进程支持以及处理延迟严重,本文不先不讨论这种方...
三个方法解决
php
并发
问题
现在Web安全书籍比较多,因此大家在学习的过程中可以少走了不少的弯路。如果以上推荐书籍阅读有困难,那就找自己能看得进的 Web 安全的书。阅读永远是最有效的方法,尽管书籍并不一定是最好的入门方式,但书籍的理解需要一定的基础;但是就目前来看,书籍是比较靠谱的入门资料。解决
php
并发
问题
的方法有很多,具体可以使用。、多进程、多线程等技术来解决
php
并发
问题
。的分布式锁等技术来解决。④50份安全攻防面试指南。⑨历年CTF夺旗赛题解析。③安全攻防357页笔记。⑦100个漏洞实战案例。⑤安全红队渗透工具包。
php
面对
并发
注意,
PHP
解决
并发
问题
的几种实现
这篇文章介绍的内容是关于
PHP
解决
并发
问题
的几种实现,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下对于商品抢购等
并发
场景下,可能会出现超卖的现象,这时就需要解决
并发
所带来的这些
问题
了在
PHP
语言中并没有原生的提供
并发
的解决方案,因此就需要借助其他方式来实现
并发
控制。方案一:使用文件锁排它锁flock函数用于获取文件的锁,这个锁同时只能被一个线程获取到,其它没有获取到锁的线程要么阻塞...
基础编程
21,889
社区成员
140,333
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章