PHP转GO的经历和看法

讲讲我自己

我之前从事PHP开发已经6年了,大多数时间都是从事服务器各项工作,一直想尝试Go还没找到合适的机会,转Go并不是说PHP不好,而是一直做有点找不到激情了,正好公司有个项目是Go的就接受过来了

PHP与Go的简单

PHP近几年都是用PHP+Swoole开发,也是见证Swoole社区生态的发展,下面的PHP都是基于Swoole与Go的对比来聊,具体仔细的可以上网查找详细的对比

1、关于语言

Golang使用静态语言,编写麻烦,单效率高,多用于io密集型计算

Swoole PHP是动态解释执行的,语言性能较差,不适合密集计算程序

2、关于IO

Golang使用单线程eventloop处理IO事件,多线程协程调度运行用户代码

Swoole使用多线程eventloop处理IO事件,多进程执行用户代码

3、关于协程

Golang语言层面支持多线程,使用多线程调度协程,可以实现堆栈文件符共享,但是容易造成数据干扰在使用时需要加锁机制等

Swoole语言层不支持多线程,使用单线程实现协程调度,每个线程数据是单独的不存在数据干扰。

4、关于运行模式

Golang是多线程运行,有超全局变量,有数据干扰问题,可以数据共享

Swoole是多进程运行,没有超全局变量,只有进程级别的变量,没有数据干扰问题,要自己使用 table等实现数据共享

PHP与GO的看法

PHP+Swoole的开发效率来说是很快的,学习成本很低,只需要学习一下Swoole的协程、网络编程和开发中的注意事项,现在的各大主流PHP框架都已经支持了Swoole,可以让PHP常驻内存,性能上有显著的提升,如果想做PHP服务器优化建议可以从这里入手,效果也是显而易见的,还能学习了解Swoole。

相比换语言来说,用Swoole更能在短时间内见效,项目线上遇到问题还是在可控范围。同时基于Swoole的框架也支持了连接池(Redis与MYSQL),这些都是比传统PHP-FPM更有优势,性能上也会更优一下些,同时还能改掉一些在FPM上开发的随意性格,例如使用exit函数,具体可看Swole的禁用函数说明。

更重要的一点是在Swoole上能看到很多GO的身影,例如协程go函数,都是借鉴GO的思想,从这里入手说不定能容易轻松一些。

php实例

go(function () {
    // 
});

Golang实例

go func() {
    //
}()

使用Go这段时间,还是有一点点不习惯,因为Go既不算面向对象也不算面向过程,更多的是考虑怎么去用它,语法更加严谨,生态也是很丰富的,运行的项目性能的确是很好,PHP有composer,Node有npm,GO有mod,所以生态上GO也已经很丰富了。

性能: Go的二进制文件会生成一个长时间运行的进程,这意味着每个请求和数据库连接的启动成本很低。这使得Go在处理大量的并发请求时能保证极快的速度,因为Go语言(goroutines模块)专为网络和多核计算而设计。

Go可以编译出一个小巧便携的二进制文件。这使得Go非常适合在Docker容器中使用。部署我们的Go容器只需几秒钟,因为它们的体积很小(大多数是4-5MB),并且由于是静态链接,因此在容器内不需要OS或运行时依赖,不用当心代码在服务器上泄漏了。

Go是类型严格的。这让代码中的内部通信更为可靠,也有助于在构建期间捕获异常,而不是在运行期间。

总结

语言只是一种工具没有好坏之分,也没什么可以性,只有合不合适之分,能发挥自身最高的价值才是好语言,适合自己的才是最好的。如果大家有什么学习GO的资料或学习地方可以推荐一下。

展开阅读全文

页面更新:2024-04-01

标签:多核   函数   干扰   进程   看法   生态   性能   语言   代码   项目   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top