swoole 与go 的高并发

本文探讨了应对高并发的策略,包括多进程、多线程和多协程。对比了Go和Swoole的协程实现,Go的协程调度器是多线程的,可能存在锁竞争,而Swoole的协程在单进程内调度,无需加锁,性能更高。此外,提到了资源管理上的差异,如Go的`defer`和PHP的析构函数。

高并发应对方法 多进程  多线程  多协程

进程:进程,直观点说,保存在硬盘上的程序运行以后,会在内存空间里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统。操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位

线程:线程,有时被称为轻量级进程(Lightweight Process,LWP),是操作系统调度(CPU调度)执行的最小单位

 

 

go的协程:Go`协程调度器是多线程的,同一时间可能会有多个协程同时执行   实际上`Go`的`chan`和并发容器,底层仍然使用了`Mutex`进行锁操作,锁的争抢是普遍存在的 因此务必要对临界资源加锁,避免出现数据同步问题。或者使用官方`sync`包提供的各种并发容器。

 

swool协程:而 swoole 中的协程调度使用 单进程模型, 所有协程都是在当前进程中进行调度, 单进程的好处也很明显 -- 简单 / 不用加锁 / 性能也高. 不用考虑资源的共享问题  本质上是串行的  用户级线程 切换更迅速

由于是单线程多进程的,底层没有使用任何`Mutex`锁,不存在锁的争抢

使用`Table`和`Atomic`对象,或者其他共享内存数据结构

借助存储实现数据的共享和中转,如`Redis`、`MySQL`或`文件操作`

 

`Go`的`defer`是绑定函数的,在当前函数退出时会执行`defer`任务。这是由于`Go`没有析构函数,可能会出现资源泄漏。而`PHP`是有析构函数的,所有资源类对象,析构时会自动释放。

 

参考 https://wiki.swoole.com/wiki/diff/?id=1018&version=1&compare=current

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值