Swoole是什么

参考资料

PHP没有像Python的Twisted、Tornado,Java的Netty、Mina,JavaScript的Node.js框架,它无法实现异步网络通信程序。而Swoole扩展就是为了弥补这个缺陷而诞生的开源项目。

Swoole和Node.js非常相似,不同的是Swoole在并行提供了底层支持。Node.js是一个单线程单进程的程序,在多核服务器上无法发挥全部CPU核的计算能力。需要程序员自行使用child_process/cluster扩展或启动多实例,使程序能够利用到多核优势。而Swoole在底层就支持了多线程/多进程,程序启动后就会创建多个IO线程和多个Worker进程。开发人员仅需要配置线程/线程数量即可。

Swoole是什么?

Swoole是PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供PHP语言的异步多线程服务器,异步TCP/UDP网络客户端、异步MySQL、异步Redis、数据库连接池、AsyncTask、消息队列、毫秒定时器、异步文件读写、异步DNS查询等。Swoole内置HTTP/WebSocket服务端/客户端、HTTP2.0服务器端。

Swoole是PHP的C扩展,可用来开发PHP的高性能高并发TCP/UDP服务器,Swoole的网络IO基于epoll/kqueue事件循环,是全异步非堵塞的。业务逻辑部分使用多进程同步阻塞方式来运行。即保证了Server能够应对高并发和大量TCP连接,又保证业务代码仍然可以简单的编写。

  • Swoole是PHP的协程高性能网络通信引擎,使用C/C++编写,提供多种通信协议的网络服务器和客户端模块。
  • Swoole支持完整的协程编程模式,可使用完全同步的代码实现异步程序。PHP代码无需额外添加任何关键词,底层自动进行协程调度,实现异步IO。
  • Swoole协程仅支持PHP7,无法在PHP5中使用。
  • Swoole提供对异步IO的支持
  • Swoole为PHP多进程的模式设计了多个并发数据结构和IPC通信机制,大大简化多进程并发编程的工作。其中包括并发原子计数器、并发HashTable、Channel、Lock、进程间通信IPC等丰富的功能。
  • Swoole虽然是标准的PHP扩展,与普通扩展不同的是,普通扩展只是提供了一个库函数,而Swoole扩展在运行后会接管PHP的控制权,进入事件循环。当IO事件发生后,Swoole会自动回调指定的PHP函数。

Swoole相比Apache和PHP-FPM,主要节省了PHP框架和全局对象每次请求创建和销毁带来的性能损耗,但如果PHP代码是裸echo的方式,Swoole框架并没有性能优势。

Swoole能做什么呢?

  • 异步多线程服务器及客户端
  • 异步MySQL
  • 异步Redis
  • 数据库连接池
  • 任务队列
  • HTTP/WebSocket服务器与客户端
  • 异步文件读写
  • Swoole2.0支持协程

简单来说,Swoole可以使PHP开发人员编写高性能的异步并发TCP、UDP、UnixSocket、HTTP、WebSocket服务。

为什么要使用Swoole?

Swoole作为PHP的扩展,其核心目的是为了解决PHP在实现Server服务器开发中遇到的一系列问题,这些问题源于PHP自身执行效率上。所以在服务器开发中,一般不会使用PHP来解决问题,所以才有了Swoole重新定义了PHP的说法。

  • 常驻内存,避免重复再带来的性能损耗,提升海量性能。

传统的PHP框架,在每次处理请求时,都要做一遍加载框架文件、配置等操作。这可能已经成为性能问题的一大原因,而使用Swoole则没有这个问题,它可以一次加载多次使用。

  • 协程异步,提高对I/O密集型场景并发处理能力。

说到协程就必须先说说进程和线程,总所周知,进程是很占用资源的,为了处理请求大量创建进程肯定是得不偿失的。而多线程应用就比较多了,在CPU层面有几个核心就会执行几个任务,线程一旦创建就多了,自然会存在线程调度的损耗。

而协程是在单线程基础上实现的,可以最大限度利用CPU资源,而不会在I/O等待时白白浪费CPU。当然协程越多占用的内存也就越多,不过这个是可以接收的。相比进程和线程,占用的资源是相对比较少的。

使用协程时,如果遇到文件读写、请求接口等场景,会自动挂起协程,把CPU让给其它协程执行任务,这样可以提升单线程的CPU资源利用率,减少浪费从而提高性能。

  • 方便地开发HTTP、TCP、UDP、WebSocket等应用,可以与硬件通信。
  • PHP高性能微服务架构

Swoole的特点

  • Accept线程解决Accept性能瓶颈和惊群问题
  • 多IO线程更多地利用多核
  • 提供全异步和半同步半异步模式
  • 处理高并发IO的部分采用异步模式
  • 复杂的业务逻辑部分采用同步模式
  • 底层支持遍历所有连接、互发数据、自动合并拆分数据包、数据发送原子性。

Swoole和Workman有什么异同点?

目前,PHP通信服务框架最为流行的是Swoole和Workerman,Swoole是使用C语言开发的PHP的扩展类,而Workman则是使用纯PHP开发的。Swoole是使用C语言开发的PHP扩展,由于有着C语言的优势,Swoole在内存管理、数据结构、通信协议解析上明显优于Workerman,而且Swoole在目前通信协议上提供了更高级的通信功能。所以Workerman能开发的Swoole都可以,而且功能更多速度更快。同样Swoole的缺点也很明显,不能根据自己需要开发,而且需要了解底层通信服务开发。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容