ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php转go?还是php+swoole?

2021-12-09 08:31:07  阅读:267  来源: 互联网

标签:社区 PHP 程序员 语言 swoole Go go php



一个老 PHP 程序员建议直接转 go。

我是在 2021 年夏天转 go 的。在那之前,写了很长时间的 php,对这门语言有很深的感情。

php 是我在大学里学的第一种脚本语言。当时流行的是微软的 asp 和 java 的 jsp。jsp 太麻烦,微软的东西我又很排斥,然后就在图书管找到了 php 的参考资料。当年我买了第一本 php 教程。你没看错,当时是有一个 PHP6 的。后来跳票,最终被 PHP7 取代了。

 

我从这本书学到了使用 PHP 动态生成 html 技术。当时惊为天人,原来还可以这样玩。可以说这本书为我打开了新世界的大门,甚至决定了我毕业的职业生涯。书里的有一些PHP6相关内容确实过时了,但大部分内容是版本无关,非常经典。到今天也值得阅读。

毕业后我的首份工作就是 PHP 开发,当时 PHP 程序员还是相对稀缺的,所以我也顺利拿到 offer。

从最早搞 apache + mod_php,再后来搞 nginx + php_fpm,再后来是 php + swoole。从 composer 到 psr,从开发 php 业务代码到写 php c 语言扩展。甚至还想着给 php 添加 fiber 支持(最终失败了,但 PHP 8.1 引入 fiber 支持,大赞)。有一段时间我希望所有的功能都用 PHP 实现。

所以在2017年有同事向我推销 go 语言的时候,我是拒绝的。


但到了 2018 年,当我有机会从零开始构建业务系统的时候,我开始认真考虑还用 PHP 是否合适的问题了。最终我的结论是「Go(至少)是更好的PHP 」

 

像 PHP 这类动态语言,开发效率方面快则快矣,但后期的维护成本非常高。PHP 的 Zend 虚拟机本身性能比较差(现在支持 jit 了,但效果有限)。PHP 的垃圾回收使用的引用计数法。为了解决循环引用的问题,不得周期性的停止运行扫描可疑对象(也就是所谓的 stop the world)。如果使用 fpm,那必然伴随着资源的反复申请与销毁;如果使用 swoole 这一类的常驻组件,那要留心内存泄漏的问题。此外,如果 PHP 程序员想更进一步,则需要学习 c 扩展等知识。PHP 社区很多关键的功能都需要 c 语言。c 语言跟 PHP 又差别太大,一般程序员很难完成这一步跨越。

而 Go 语言则几乎囊括了 PHP 的优点而且基本没有对应的缺点。Go虽然也有GC,早期也有 stop the world 的问题,但现在已经不是什么问题。Go语言虽然的强类型的静态语言,但支持类型推导,写起来也不比 PHP 更麻烦。做为一个基础平台,Go没有虚拟机的解释运行开销,可以最大程度利用CPU,这是PHP很难望其项背的。Go语言本身实现了自举,其本身源码是Go代码加上少量汇编。如果程序员有心深入学习,比PHP程序员学 c 语言要容易多了。

那 Go 语言就没有缺点吗?肯定有。在 2018 年的时候,Go 社区还没说要支持泛型,所以在有些场景下需要写很多重复的代码。这确实是一个劣势。但 Go 内置的 map 和 slice 支持声明类型,再辅之以接口和 interface{},基本可以应该常规业务。这个我在文章里已有分析。现在是 2021 年了,再过半年,Go1.18就会支持泛型,到时候 Go 语言就没有什么硬伤了。

要说起并发和网络编程,很少有语言可以跟 Go 语言 PK,PHP则更是不入流。Swoole 的高性能也仅仅是沾了常驻内存的光。只要是常驻内存的方案,比如 amphp 或者 php-pm,性能都甩 php-fpm 几条街,不是它们有多优秀,而是 php-fpm 太慢了。这些性能跟 Go 相比还是差太远。无论这些方案多么精巧,都摆脱不了 Zend 虚拟机的限制:jit 不行、gc 不行。

我现在已经很少写 PHP 了,但依然关注 PHP 的发展。最令我期待的就是 8.1 的 fiber 特性,这是社区对 swoole 这一类方案的回应。到时候 swoole 方案应该会逐步退出历史。但讲道理 PHP 社区并没有着手解决困扰 PHP 的核心问题(jit 和 gc 等),而是在纠结一些不是很重要的问题。

不能说这些改动没用意义,但确实是可有可无。相反,Go 社区则在引入泛型的支持,改用寄存器传参以进一步提高性能,不断改善 gc 延时,优化 defer 执行效率。Go没有太多语法糖,但社区却在实打实把精力放到核心组件上。这让我也觉着 PHP 真是有点日薄西山的意思了。

那 PHP 语言就没有优点吗?肯定有。PHP+MySQL积累了大量的社区财富,像 WordPress 等重量级的应用都是 PHP 开发的,PHP 社区也有像 Laravel 这样优秀的框架。如果你懂 PHP 而且能招到人,那使用PHP快速搭建系统原型是很方便的。但我们也要看到这只是一种历史惯性。随着Go语言的崛起,越来越多的人转Go,现在PHP程序员也越来越难招。最终PHP社区会不断消亡。现在还用PHP的,不是维护老系统,就是希望你转Go或者Java。新系统用 PHP 的已经很少了。

 

标签:社区,PHP,程序员,语言,swoole,Go,go,php
来源: https://www.cnblogs.com/zenghansen/p/15665428.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有