go为什么比php性能好,刚学 GO,撸了个支付宝发券的程序,为什么性能还比不上 PHP ?...
下面是主程代码,这是详细代码
func main() {
//解析参数
filePath := flag.String("f", "", "文件路径")
tplId := flag.String("t", "", "模版 ID")
flag.Parse()
//解析密钥
pk, err := ParsePrivateKey()
check(err)
//读取文件
start := time.Now()
csvFile, err := os.Open(*filePath)
check(err)
defer csvFile.Close()
csvReader := csv.NewReader(csvFile)
arr, err := csvReader.ReadAll()
fmt.Println(len(arr))
check(err)
paramsChan := make(chan string, 200)
//统计成功与失败数量
var mutex = &sync.Mutex{}
successNum := 0
failNum := 0
var wg sync.WaitGroup
go func() {
for _, row := range arr {
wg.Add(1)
go func(row []string) { //通过添加显式参数,确保当 go 语句执行时,使用当前 row 值(参考 5.6.1 内部匿名函数中获取循环变量的问题)
defer wg.Done()
params, err := getQuery(row, *tplId, pk)
if err != nil {
fmt.Println(err)
}
paramsChan
}(row)
}
wg.Wait()
close(paramsChan) //安全关闭通道
}()
var wg2 sync.WaitGroup
limit := make(chan bool, 100)
for s := range paramsChan {
wg2.Add(1)
limit
go func(s string) {
defer wg2.Done()
res, err := sendMsg(s)
if err != nil {
fmt.Println(err)
mutex.Lock()
failNum++
mutex.Unlock()
}
if res {
mutex.Lock()
successNum++
mutex.Unlock()
} else {
mutex.Lock()
failNum++
mutex.Unlock()
}
}(s)
}
wg2.Wait()
fmt.Printf("发券成功:%d\n", successNum)
fmt.Printf("发券失败:%d\n", failNum)
fmt.Printf("%.2fs elapsed\n", time.Since(start).Seconds())
}
现在如果只整理请求参数,读取 10W 行的 csv 文件,大概耗时 110-120S 左右,耗费内存在 900M 左右。如果加上发送请求的代码,会因为内存消耗太大,直接被操作系统 KILL。
我用 PHP 开 4 个进程+guzzle 异步请求,处理完 10W 数据耗时在 110S 左右。
性能差这么多,这究竟是我代码写的太菜还是因为 PHP 是最好语言?(手动狗头)
go为什么比php性能好,刚学 GO,撸了个支付宝发券的程序,为什么性能还比不上 PHP ?...相关推荐
- 学计算机专业,但是不想做程序员,还能做什么呢?
我本科学得是通信,毕业以后,家里供我到国外读计算机专业,父母都是工薪阶层,加上新疆的工资又不高,不仅要支付学费还要负担我的生活费,所以我很能体谅父母的艰辛. 第一学期,我学得很用功,开学第一个月的编程 ...
- [转载]如何提高.NET Compact Framework应用程序的性能 - 黎波 - 博客园
[转载]如何提高.NET Compact Framework应用程序的性能 以下编程做法可以节省内存和改善设备应用程序的性能. 使用 Windows 窗体和图形节省内存 对提供 BeginUpdate ...
- python花钱培训值吗-Python培训班学生刚学到70%就拿到月薪万元的Offer
原标题:Python培训班学生刚学到70%就拿到月薪万元的Offer 刘宇是马哥Python开发实战班的学生,作为开办以来最为优秀的十几名学生之一,现在在一间创业公司担任高级开发.很少有人知道,再进入 ...
- 在日常生活中,经常会遇到某些需求对文件名称进行修改,借助刚学过的文件操作,编写一个可以批量修改文件名的小程序。
在日常生活中,经常会遇到某些需求对文件名称进行修改,借助刚学过的文件操作,编写一个可以批量修改文件名的小程序. import os path=input('请输入文件路径(结尾加上/):') #获取该 ...
- 刚学vue,写的一个入门demo,时光网
vue写的一个移动端时光网 刚学vue不久,动手写了一个demo. 源代码 源代码地址:GitHub 技术栈 vue2 + vuex + vue-router + webpack + ES6 + sc ...
- 一只刚学java的菜鸡一次练手练习——简易的快递信息管理系统
一只刚学java的菜鸡一次练手练习--简易的快递信息管理系统 由于是新手第一次写练手项目并且是自学,例如存储查询数据的方式并没有选择最合适的集合,GUI也写的比较丑,见谅哈哈哈 以下是正文: 首先是快 ...
- python用*做三角形_我刚学这个,怎么用python表示三角形成立【python数字三角形教程】...
我刚学这个,怎么用python表示三角形成立 def Get_List(a,b,c): oList = [a,b,c] oList.sort() return oList a = raw_input( ...
- 刚学C语言和python,请多多指教
目前我是大一学生,刚学C和python希望社区的大佬多多指教. 我是上了大学才接触到编程,我发现编程对我来说是一件挺有趣的一件事,其实我要是更早接触编程会学的更有趣和高效. 希望我能继续保持这份热情, ...
- 适合刚学js小白熟悉运算符的一个小页面
** 适合刚学js小白熟悉运算符的一个小页 ** 刚学习js的小白,对于运算符上手的没那么快的,可以着手尝试一下这种简单,对逻辑提升比较快的小页面 因为我也是一个萌新,只是感觉这个页面帮助很大,所以分 ...
最新文章
- 本地Yum生成数据库及常用命令
- 就算是戴上口罩,AI也知道你在说什么丨EMNLP 2020最佳论文
- Atitit.工作流 与 规则引擎
- Linux 下 离线下载服务部署 CCAA的安装使用
- 请编写一个 C 函数,该函数给出一个字节中8二进制数中为1的个数
- mpvue微信小程序http请求-fly.js
- qemu-kvm磁盘读写的缓冲(cache)的五种模式
- SysinternalsSuite工具
- thinkphp-session与cookie
- Linux学习总结(33)——Linux Java启动关闭bash脚本
- CMS收集器中两个致命的问题
- python数据分析实例_python数据分析实例3-商铺数据加载及存储
- 【python教程入门学习】Python爬虫入门学习:网络爬虫是什么
- 文法规则自顶向下分析
- tkinter点击按钮实现图片的切换
- 侵权和违约的区别是哪些
- vivo Xplay的usb调试模式在哪里,打开vivo Xplayusb调试模式的教程
- mysql修改数据的sql语句怎么写_MySQL数据库修改数据语句的简单用法
- Android的证书验证过程
- 第二证券|两大板块掀涨停潮,有个股猛拉20cm!这只港股复牌一度暴跌
热门文章
- 运行Jenkins部署任务
- 合同相似可逆等价矩阵的关系及性质_笔记:辛矩阵和Siegel上半平面
- python三菱_三菱机器人melfarxm.ocx控件的Python使用,MelfaRxMOCX,python,用法
- iphone字体_iPhone 适合老人盘吗?
- html添加子节点方法,HTML DOM appendChild() 方法
- C/C++ _wcslwr_s 函数 – unicode 字符串大写转小写 - C语言零基础入门教程
- Python len函数 - Python零基础入门教程
- 事物与持久化_跟面试官侃半小时MySQL事务,说完原子性、一致性、持久性的实现...
- 计算机培训开场语,辅导班家长会主持词开场白
- oracle实验四运动会,实验四oracle的安全性和完整性控制