商城网站前期准备,seo优化能提高网站的流量吗,广州自助网站设计平台,php无法调用wordpressPHP如何处理并发什么是进程、线程、协程进程 Process计算机中的程序关于某数据集合上的一次运行活动#xff0c;“一个执行中的程序”系统进行资源分配和调度的基本单位三态模型#xff1a;多道程序系统中#xff0c;进程在处理器上交替运行#xff0c;状态不断地发生变化运…PHP如何处理并发什么是进程、线程、协程进程 Process计算机中的程序关于某数据集合上的一次运行活动“一个执行中的程序”系统进行资源分配和调度的基本单位三态模型多道程序系统中进程在处理器上交替运行状态不断地发生变化运行正在处理机上运行就绪当一个进程获得了除处理机以外的一切所需资源一旦得到处理机即可运行则称处于就绪状态。可按多个优先级来划分队列。如当一个进程由于时间片用完而进入就绪状态时排入低优先级当进程由IO操作完成而进入就绪状态时排入高优先级队列。阻塞也称为等待或睡眠状态一个进程正在等待某一事件发生(例如请求IO而等待IO完成等)而暂时停止运行这时即使把处理机分配给进程也无法运行。五态模型活跃阻塞是指进程已在主存一旦等待的事件发生便进入活跃就绪状态静止阻塞进程对换到辅存时的阻塞状态一旦等待的事件发生便进入静止就绪状态。活跃就绪指进程在主存并且可被调度的状态静止就绪是指进程被对换到辅存时的就绪状态是不能被直接调度的状态只有当主存中没有活跃就绪态进程或者是挂起就绪态进程具有更高的优先级系统将把挂起就绪态进程调回主存并转换为活跃就绪。新建态进程刚刚被创建时没有被提交的状态等待系统完成创建进程的所有必要信息。活跃就绪/静止就绪运行-活跃阻塞/静止阻塞终止态进程已结束运行回收除进程控制块之外的其他资源并让其他进程从进程控制块中收集有关信息。线程 Thread有时被称为轻量级进程(LightWeight Process, LWP)程序执行流的最小单元。一个相对独立的、可调度的执行单元系统独立调度和分配CPU的基本单位。共享进程的地址空间和资源。状态就绪、阻塞、运行就绪状态具备运行的所有条件逻辑上可以运行在等待处理机运行状态占有处理机正在运行阻塞状态在等待一个事件(如某个信号量)逻辑上不可执行协程 Coroutine一种用户态的轻量级线程调度完全由用户控制拥有自己的寄存器上下文和栈调度切换时将寄存器上下文和栈保存到其他地方切回来的时候恢复基本没有内核切换的开销可以不加锁的访问全局变量异步什么是多进程、多线程多进程同一个时间里同一个计算机系统中如果允许两个或两个以上的进程处于运行状态就是多进程多线程单个程序中同时运行多个线程完成不同的工作就是多线程同步阻塞模型多进程最早的服务端程序都是通过多进程、多线程来解决并发IO的问题一个请求创建一个进程然后子进程进入循环同步堵塞地与客户端连接进行交互收发处理数据。多线程用多线程模式实现非常简单线程中直接向某一个客户端连接发送数据。缺点严重依赖进程的数量解决并发问题启动大量进程会带来额外的进程调度消耗异步非阻塞模型select 系统的查询一个进程内建立1024个连接poll 模型循环检测是否有连接。现在各种高并发异步IO的服务器程序都是基于 epoll 实现的。IO复用异步非阻塞程序使用经典的 Reactor 模型顾名思义就是反应堆的意思本身不处理任何数据收发。只是可以监视一个socket句柄的事件变化。Reactor模型Add 添加一个socket到ReactorSet 修改socket对应的事件如可读可写Del 从Reactor中移除不再监听事件Callback 事件发生后回调指定的函数Nginx多线程ReactorSwoole多线程Reactor 多进程WorkerPHP并发编程实践Swoole扩展异步、并行、高性能网络通信引擎使用C语言编写提供了PHP语言的异步多线程服务器异步TCP/UDP网络客户端异步MySQL异步Redis数据库连接池AsyncTask消息队列毫秒定时器异步文件读写异步DNS查询为PHP多进程的模式设计了多个并发数据结构和IPC通信机制可以大大简化多进程并发编程的工作Swoole2.0支持了类似Go语言的协程可以使用完全同步的代码实现异步程序消息队列经典场景注册成功后发送邮件发送短信串行方式注册成功后先发送邮件在发送短信并行方式注册成功后同时发送邮件和短信消息队列方式(离线方式)注册成功后将成功消息写入队列此时直接返回成功给用户写入队列的时间非常短可以忽略不计然后异步发送邮件和短信 -应用解耦场景说明用户下单后订单系统需要通知库存系统。假如库存系统无法访问则订单减库存将失败从而导致订单失败。订单系统与库存系统耦合引用队列用户下单后订单系统完成持久化处理将消息写入消息队列返回用户订单下单成功。订阅下单的消息采用拉/推的方式获取下单信息库存系统根据下单信息进行库存操作。流量削峰秒杀活动流量瞬时激增服务器压力过大。用户发起请求服务器接收后先写入消息队列。假如消息队列长度超过最大值则直接报错或提示用户。后续程序读取消息队列再做处理。控制请求量缓解高流量。日志处理场景解决大量日志的传输日志采集程序将程序写入消息队列然后通过日志处理程序的订阅消费日志。消息通讯场景聊天室多个客户端订阅同一主题进行消息发布和接收常见消息队列产品KafkaActiveMQZeroMQRabbitMQRedis接口的并发请求curl_multi_init