下面是主程代码,这是详细代码

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 ?...相关推荐

  1. 学计算机专业,但是不想做程序员,还能做什么呢?

    我本科学得是通信,毕业以后,家里供我到国外读计算机专业,父母都是工薪阶层,加上新疆的工资又不高,不仅要支付学费还要负担我的生活费,所以我很能体谅父母的艰辛. 第一学期,我学得很用功,开学第一个月的编程 ...

  2. [转载]如何提高.NET Compact Framework应用程序的性能 - 黎波 - 博客园

    [转载]如何提高.NET Compact Framework应用程序的性能 以下编程做法可以节省内存和改善设备应用程序的性能. 使用 Windows 窗体和图形节省内存 对提供 BeginUpdate ...

  3. python花钱培训值吗-Python培训班学生刚学到70%就拿到月薪万元的Offer

    原标题:Python培训班学生刚学到70%就拿到月薪万元的Offer 刘宇是马哥Python开发实战班的学生,作为开办以来最为优秀的十几名学生之一,现在在一间创业公司担任高级开发.很少有人知道,再进入 ...

  4. 在日常生活中,经常会遇到某些需求对文件名称进行修改,借助刚学过的文件操作,编写一个可以批量修改文件名的小程序。

    在日常生活中,经常会遇到某些需求对文件名称进行修改,借助刚学过的文件操作,编写一个可以批量修改文件名的小程序. import os path=input('请输入文件路径(结尾加上/):') #获取该 ...

  5. 刚学vue,写的一个入门demo,时光网

    vue写的一个移动端时光网 刚学vue不久,动手写了一个demo. 源代码 源代码地址:GitHub 技术栈 vue2 + vuex + vue-router + webpack + ES6 + sc ...

  6. 一只刚学java的菜鸡一次练手练习——简易的快递信息管理系统

    一只刚学java的菜鸡一次练手练习--简易的快递信息管理系统 由于是新手第一次写练手项目并且是自学,例如存储查询数据的方式并没有选择最合适的集合,GUI也写的比较丑,见谅哈哈哈 以下是正文: 首先是快 ...

  7. python用*做三角形_我刚学这个,怎么用python表示三角形成立【python数字三角形教程】...

    我刚学这个,怎么用python表示三角形成立 def Get_List(a,b,c): oList = [a,b,c] oList.sort() return oList a = raw_input( ...

  8. 刚学C语言和python,请多多指教

    目前我是大一学生,刚学C和python希望社区的大佬多多指教. 我是上了大学才接触到编程,我发现编程对我来说是一件挺有趣的一件事,其实我要是更早接触编程会学的更有趣和高效. 希望我能继续保持这份热情, ...

  9. 适合刚学js小白熟悉运算符的一个小页面

    ** 适合刚学js小白熟悉运算符的一个小页 ** 刚学习js的小白,对于运算符上手的没那么快的,可以着手尝试一下这种简单,对逻辑提升比较快的小页面 因为我也是一个萌新,只是感觉这个页面帮助很大,所以分 ...

最新文章

  1. 本地Yum生成数据库及常用命令
  2. 就算是戴上口罩,AI也知道你在说什么丨EMNLP 2020最佳论文
  3. Atitit.工作流 与 规则引擎
  4. Linux 下 离线下载服务部署 CCAA的安装使用
  5. 请编写一个 C 函数,该函数给出一个字节中8二进制数中为1的个数
  6. mpvue微信小程序http请求-fly.js
  7. qemu-kvm磁盘读写的缓冲(cache)的五种模式
  8. SysinternalsSuite工具
  9. thinkphp-session与cookie
  10. Linux学习总结(33)——Linux Java启动关闭bash脚本
  11. CMS收集器中两个致命的问题
  12. python数据分析实例_python数据分析实例3-商铺数据加载及存储
  13. 【python教程入门学习】Python爬虫入门学习:网络爬虫是什么
  14. 文法规则自顶向下分析
  15. tkinter点击按钮实现图片的切换
  16. 侵权和违约的区别是哪些
  17. vivo Xplay的usb调试模式在哪里,打开vivo Xplayusb调试模式的教程
  18. mysql修改数据的sql语句怎么写_MySQL数据库修改数据语句的简单用法
  19. Android的证书验证过程
  20. 第二证券|两大板块掀涨停潮,有个股猛拉20cm!这只港股复牌一度暴跌

热门文章

  1. 运行Jenkins部署任务
  2. 合同相似可逆等价矩阵的关系及性质_笔记:辛矩阵和Siegel上半平面
  3. python三菱_三菱机器人melfarxm.ocx控件的Python使用,MelfaRxMOCX,python,用法
  4. iphone字体_iPhone 适合老人盘吗?
  5. html添加子节点方法,HTML DOM appendChild() 方法
  6. C/C++ _wcslwr_s 函数 – unicode 字符串大写转小写 - C语言零基础入门教程
  7. Python len函数 - Python零基础入门教程
  8. 事物与持久化_跟面试官侃半小时MySQL事务,说完原子性、一致性、持久性的实现...
  9. 计算机培训开场语,辅导班家长会主持词开场白
  10. oracle实验四运动会,实验四oracle的安全性和完整性控制