V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Buffer2Disk  ›  全部回复第 4 页 / 共 13 页
回复总数  260
1  2  3  4  5  6  7  8  9  10 ... 13  
2019-07-17 18:00:17 +08:00
回复了 Buffer2Disk 创建的主题 程序员 Python 和 Go 在循环时候的性能对比
@neoblackcap
我尝试了下,golang 里面用 map 这种哈希结构的集合来存储数据,它判断元素是否存在的时间复杂度也是 O(1)
使用之后,cpu 的消耗 比 单纯的用 for 循环来迭代降下来不少

所以伪代码就是这样
for i in list {
if map[i] != null {
//存在
}
}

两个 6000 个元素的集合情况下
map 时间复杂度 O(n) , cpu 消耗 1%
for 循环迭代 O(n^2) ,cpu 消耗 4%

在元素比较多的情况,map 这种能够快速检索 key 的结构还是有优势的
2019-07-17 17:07:30 +08:00
回复了 Buffer2Disk 创建的主题 程序员 Python 和 Go 在循环时候的性能对比
@neoblackcap 网上那些 golang 的第三方库, 判断一下这个元素是否在 的这个操作(contains),内部实现也是一个循环,所以实际上也就变成了 2 个循环在叠代

python 我不清楚是怎么个实现法儿的
2019-07-17 15:13:00 +08:00
回复了 Buffer2Disk 创建的主题 程序员 Python 和 Go 在循环时候的性能对比
@neoblackcap 不过有个疑问就是,为什么 Python 计算集合的差集的时候时间复杂度是 O(n)呢? python 计算差集原理我不太了解

因为 golang 的官方并没有提供计算差集的库,我去网上看了一些第三方 golang 库的源码,实际上也是通过嵌套循环来实

现集合计算差集的,并且这种嵌套循环在数据量比较大的时候,cpu 占用也并不是太高
2019-07-17 13:07:24 +08:00
回复了 Buffer2Disk 创建的主题 程序员 Python 和 Go 在循环时候的性能对比
@neoblackcap 确实,算差集的时间复杂度要小很多
2019-07-17 01:29:04 +08:00
回复了 Buffer2Disk 创建的主题 程序员 Python 和 Go 在循环时候的性能对比
<img src="https://i.loli.net/2019/07/17/5d2e09582d18548030.png" alt="5555.png" title="5555.png" />
2019-07-17 01:26:55 +08:00
回复了 Buffer2Disk 创建的主题 程序员 Python 和 Go 在循环时候的性能对比
@niubee1 大佬,我的关注点其实是在 cpu 和 运行耗时 一起的

我试了下你的代码

排除掉了 range 的因素,提前创建好 list,cpu 的消耗依然不低啊(相对于 go 的 cpu 占用来说,使用的是 1 核的虚拟机)

当然我是通过 top 粗略的看了下 python 进程的 cpu 占用,可能不是那么的精确,但是能侧面反映出来大概的占用情况
2019-07-17 00:55:00 +08:00
回复了 Buffer2Disk 创建的主题 程序员 Python 和 Go 在循环时候的性能对比
@niubee1 好的,谢谢大佬,我研究研究
2019-07-17 00:24:58 +08:00
回复了 Buffer2Disk 创建的主题 程序员 Python 和 Go 在循环时候的性能对比
@niubee1 我看你这个是用 in 和 not in 来判断元素是否在 list 存在是嘛?

这个我试过了,cpu 消耗依然很高,估计 in 和 not in 的内部实现也是通过这种循环来实现的
2019-07-17 00:19:16 +08:00
回复了 Buffer2Disk 创建的主题 程序员 Python 和 Go 在循环时候的性能对比
@neoblackcap 你的意思是,range 返回列表的时候,是消耗 cpu 的主要部分嘛?

我怎么感觉是循环的时候消耗的,我另外一份代码循环的时候,是直接 2 个 list 来嵌套循环的,没有 range

然后加了 sleep(0.1) ,cpu 就降价来了,但是这样的话,循环的耗时就大大增加了
2019-07-17 00:15:07 +08:00
回复了 Buffer2Disk 创建的主题 程序员 Python 和 Go 在循环时候的性能对比
@neoblackcap 对,但是我要循环的,其实就是列表
2019-07-17 00:13:10 +08:00
回复了 Buffer2Disk 创建的主题 程序员 Python 和 Go 在循环时候的性能对比
@niubee1 我要循环的其实是 2 个 list,只不过抽象成了上面的 range,

list 有办法优化么。。。。
2019-07-16 23:39:47 +08:00
回复了 Buffer2Disk 创建的主题 程序员 Python 和 Go 在循环时候的性能对比
@ysc3839 看 top 啊
2019-07-16 09:56:20 +08:00
回复了 labulaka 创建的主题 Go 编程语言 阿里云 Go Module 代理仓库服务上线了
可以,正好需要
2019-07-11 22:48:09 +08:00
回复了 Buffer2Disk 创建的主题 Go 编程语言 go 的日志输出如何做到统一?
@katsusan 试了下重定向确实成功了,
但是 windows(本地开发环境)上重定向的代码和 Linux(线上环境)上的是不同的(不兼容),

然后 windows 机器上调试代码的话,Linux 那一段重定向的代码直接被编译器标红了,编译都不能通过 = = ,

只能先注释掉 Linux 才能本地调试。。。。也是有点醉
2019-07-11 22:08:48 +08:00
回复了 Buffer2Disk 创建的主题 Go 编程语言 go 的日志输出如何做到统一?
@katsusan 是的,那只有捕获一下 Stderr 的日志,重定向到日志了。但是估计要区分 Linux,和 windows 平台的差别了
2019-07-11 21:46:55 +08:00
回复了 Buffer2Disk 创建的主题 Go 编程语言 go 的日志输出如何做到统一?
@TypeErrorNone

不过你发的这个,好像也没办法限制第三方库的怎么打日志的行为啊,
只能控制自己怎么打日志输出到文件
2019-07-11 21:37:16 +08:00
回复了 Buffer2Disk 创建的主题 Go 编程语言 go 的日志输出如何做到统一?
@TypeErrorNone 这个看起来还不错,还有自动切割日志的轮子
我看了下 demo,是只能重定向 error 级别的日志嘛?
2019-07-11 17:47:04 +08:00
回复了 Buffer2Disk 创建的主题 Go 编程语言 go 的日志输出如何做到统一?
@rrfeng 上面的日志是 go-sql-driver/mysql v1.4.1 打出来的,定义如下
var errLog = Logger(log.New(os.Stderr, "[mysql] ", log.Ldate|log.Ltime|log.Lshortfile))

我都服了,感觉 go 的日志系统有点乱七八糟的。。。每个库自己搞一套。。。。
1  2  3  4  5  6  7  8  9  10 ... 13  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   911 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 18ms · UTC 22:09 · PVG 06:09 · LAX 15:09 · JFK 18:09
Developed with CodeLauncher
♥ Do have faith in what you're doing.