[发明专利]一种基于PHP处理高并发IO的方法在审
申请号: | 201910898049.6 | 申请日: | 2019-09-23 |
公开(公告)号: | CN110795254A | 公开(公告)日: | 2020-02-14 |
发明(设计)人: | 鲁曦 | 申请(专利权)人: | 武汉智美互联科技有限公司 |
主分类号: | G06F9/54 | 分类号: | G06F9/54;G06F9/48 |
代理公司: | 11335 北京汇信合知识产权代理有限公司 | 代理人: | 王维新 |
地址: | 430000 湖北省武汉市东湖新技术开发区光谷大道*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 协程 系统资源 异步处理 调度 线程 并发 代码逻辑 继续执行 进程创建 线程创建 性能瓶颈 多进程 多线程 阻塞 创建 耗时 配置 进程 | ||
本发明公开了一种基于PHP处理高并发IO的方法,包括:Swoole根据配置创建单个或者多个进程;Master进程创建N个Reactor线程;在每个Reactor线程中创建协程;通过协程调度异步处理IO任务。本发明使用Swoole模型,通过多线程Reactor模型(基于epoll)加上多进程Worker,在每个线程创建协程,通过协程调度异步处理IO任务,即当遇上IO耗时的情况时,通过协程调度去先处理其他代码逻辑,直到IO完成再继续执行之前的代码;充分利用系统资源,减少IO阻塞等待和系统资源的浪费,也大大提升了高并发下的IO处理能力,可以解决Accept性能瓶颈和惊群问题。
技术领域
本发明涉及高并发IO处理技术领域,具体涉及一种基于PHP处理高并发IO的方法。
背景技术
高并发它通常是指同时并行处理很多请求,它是分布式系统架构设计中必须考虑的因素之一。当系统对请求做出响应的时间过大,就会大大降低互联网产品的用户体验度。
在互联网时代,高并发通常是指并发访问,也就是在某个时间点,有多少个访问同时到来。通常一个系统的日PV在千万以上,有可能是一个高并发的系统。
目前在并发IO的解决方案中最多的是使用IO复用技术,Linux很早就提供了select系统调用,可以在一个进程内维持1024个连接。后来又加入了poll系统调用,poll做了一些改进,解决了1024限制的问题,可以维持任意数量的连接。但select/poll还存在一个问题:select/poll需要循环检测连接是否有事件。此时,如果服务器有100万个连接,在某一时间只有一个连接向服务器发送了数据,select/poll需要做循环100万次,其中只有1次是命中的,剩下的999999次都是无效的,白白浪费了CPU资源。
直到Linux 2.6内核提供了新的epoll系统调用,可以维持无限数量的连接,而且无需轮询,这才真正解决了C10K问题。现在各种高并发异步IO的服务器程序都是基于epoll实现的,比如Nginx、Node.js、Erlang、Golang。像Node.js这样单进程单线程的程序,都可以维持超过1百万TCP连接,全部归功于epoll技术。
发明内容
针对上述问题中存在的不足之处,本发明提供一种基于PHP处理高并发IO的方法。
本发明公开了一种基于PHP处理高并发IO的方法,包括:
Swoole根据配置创建单个或者多个进程;
将当前进程作为Master进程,所述Master进程创建N个Reactor线程;
在每个Reactor线程中创建协程;
通过协程调度异步处理IO任务。
作为本发明的进一步改进,N由配置的reactor_num、worker_num和CPU核心数目共同决定。
作为本发明的进一步改进,每个所述Reactor线程中运行一个Reactor对象;
所述Reactor线程,用于接收来自客户端发送的数据、发送来自服务器的响应数据和处理Swoole定时器事件。
作为本发明的进一步改进,所述在每个Reactor线程中创建协程,包括:
每个Reactor线程在接收到客户端的请求时,通过swoole的Go函数创建一个协程。
作为本发明的进一步改进,所述通过协程调度异步处理IO任务,包括:
协程中遇到IO阻塞,协程让出控制,进入协程调度队列,对阻塞任务进行异步处理。
与现有技术相比,本发明的有益效果为:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉智美互联科技有限公司,未经武汉智美互联科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910898049.6/2.html,转载请声明来源钻瓜专利网。