V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  bli22ard  ›  全部回复第 1 页 / 共 8 页
回复总数  145
1  2  3  4  5  6  7  8  
7 小时 43 分钟前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
@kneo 就启动 goroutine ,不管是堆还是栈,没搞懂它有什么存,如果是参数,变量,为什么要是 2kb ,而不是这些参数、变量的实际大小
8 小时 57 分钟前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
@kneo
> 我的理解这 2KB 就是预分配的栈大小。过小的初始栈可能会导致频繁的内存重新分配。
> 2KB 可能是 go 团队在性能测试之后得到的一个比较好的默认值。这个值也是经过多次调整的:

更本质的是,为什么需要这个 2kb 内存,这 2kb 存的什么东西,这个期待有实力的人研究一下 runtime 。
1 天前
回复了 hez2010 创建的主题 程序员 运行 100 万个异步并发任务需要多少内存
我不认为这个测试方法不专业,因为它能说明,在这个 sleep 场景下,goroutine 内存占比确实比 java 的 virtual thread 占用高。
我觉的叫 goroutine 为协程并没有什么问题,可能翻译得不够准确,但是当你说 go 协程,别人知道你指的是 goroutine 就可以了,没有什么大问题。

不过我觉得这个测试可能并不能很好的说明问题,不管是 goroutine ,rust 的 tokio ,或者是 c#的 async/await ,它们本质上解决两个问题,一个 io 就绪回调,一个 sleep 就绪回调。但是要实现这种回调,需要在资源没就绪时候,保存现场,腾出 cpu 给其他任务运行,保存完毕后,其他任务运行,资源就绪后,就有了再次被执行的机会。这个内存消耗主要在保存现场需要的内存上。由于这些异步框架实现方式不一,不排除有些实现,检查测试代码不需要保存现场,直接定时器回调实现,从而节省内存。
一种测试方法是通过每个任务去发起一个 tcp 连接,然后服务端 hold 10s 再返回,测试内存占用可能更能说明实际的问题。

另外还有就是执行时间问题,因为如果开一个 goroutine 排队执行,内存占用肯定比开 1m goroutine 小🤣


也有可能 java 的 virtual thread 和 c# async/await 确认非常优秀,全面领先 goroutine ,希望有实力的人从新设计测试方法。
比较好奇,每个 goroutine 2kb ,到底存的是什么
最后 @lesismal @kneo 两位高手来围观
13 天前
回复了 bli22ard 创建的主题 程序员 rust vs golang 交叉编译
@c0t 看得出来经验丰富啊👍。有个疑问,openssl-sys 为什么不直接映射 openssl 版本号发布,然后提供对应 rustup target list 所有编译后的版本,在 rust 层屏蔽各个平台的差异性,使用这个 crate 的人员就不用关心平台差异性。不然现在的 cargo build 看起来提供了 --target 支持交叉编译,但是大多数项目都会编译失败,tls 依赖的可能性太高了。现在这样--target ,这个参数太鸡肋了。
很多文章上用系统 openssl 编译 ,apt install libssl-dev 类似这种包管理器直接安装,这种编译使用系统 openssl 链接的,编译稳定性大大降低,因为系统各个版本安装的 openssl 版本不尽相同,难道 openssl 兼容性就这么好
15 天前
回复了 bli22ard 创建的主题 程序员 rust vs golang 交叉编译
@zengxs 感觉确实是这个思路,感觉大多数时间花费在搞编译器上了。


@undeflife golang ,带硬件加速的加密算法,以及 tls ,都是标准库自带,不依赖 cgo 。加密算法,以及 tls ,rust 没有全部原生 rust 实现。


@Donaldo 这个没试过,我是看到 rustls 里面有用到 ring 库。


@MrKrabs 性能快的不是特别多,但是带来的麻烦不小


@yplam 一看就是搞过的



@ihciah 看到过这个,但是没测试过,有时间试下
去农批商场, 进货橙子,有 5 家在卖橙子,价格不一样,请问根据什么判断,应该进货哪家橙子。你的对手有,美团买菜,朴朴买菜,钱大妈,肉联帮,百果园,相比这些你有什么优势
15 天前
回复了 bli22ard 创建的主题 程序员 rust vs golang 交叉编译
@PTLin


(base) PS C:\Users\3\RustroverProjects\rs-certbot> cargo tree --target=x86_64-unknown-linux-musl -i ring
ring v0.17.8
|-- instant-acme v0.7.2
| `-- rs-certbot v0.1.0 (C:\Users\3\RustroverProjects\rs-certbot)
|-- rcgen v0.13.1
| `-- rs-certbot v0.1.0 (C:\Users\3\RustroverProjects\rs-certbot)
|-- rustls v0.23.16
| |-- hyper-rustls v0.27.3
| | |-- instant-acme v0.7.2 (*)
| | `-- reqwest v0.12.9
| | `-- rs-certbot v0.1.0 (C:\Users\3\RustroverProjects\rs-certbot)
| |-- reqwest v0.12.9 (*)
| `-- tokio-rustls v0.26.0
| |-- hyper-rustls v0.27.3 (*)
| `-- reqwest v0.12.9 (*)
|-- rustls-webpki v0.102.8
| `-- rustls v0.23.16 (*)
`-- x509-parser v0.16.0
`-- rs-certbot v0.1.0 (C:\Users\3\RustroverProjects\rs-certbot)
(base) PS C:\Users\3\RustroverProjects\rs-certbot>




(base) PS C:\Users\3\RustroverProjects\rs-certbot> cargo tree --target=x86_64-unknown-linux-musl -i openssl-sys
error: package ID specification `openssl-sys` did not match any packages
(base) PS C:\Users\3\RustroverProjects\rs-certbot>
15 天前
回复了 bli22ard 创建的主题 程序员 rust vs golang 交叉编译
@mxT52CRuqR6o5
zig 貌似也有一些问题

@sunny352787
没用 cgo 情况下,golang ,linux 、mac 、windows 互相交叉编译没遇到过问题


@PTLin
😄,reqwest = {version = "0.12",default-features = false,features = ["rustls-tls"]} 加了这个, 但是编译时候,需要 gcc 来编译 ring
15 天前
回复了 bli22ard 创建的主题 程序员 rust vs golang 交叉编译
@pursuer aarch64-musl openssl 太难搞。
17 天前
回复了 zwgf 创建的主题 移动开发 开发的 APP 接口总是会被封,怎么处理?
提供一种思路,没实战过,找个国内可以发帖的网站,简书,知乎,小红书,随便选一个,不用登录可以访问。然后把你真正的域名加密后发到帖子里面,迷惑性更强一些的,写篇教程,里面插入一段加密后的内容,然后你的 app 启动,就去爬这个帖子,拿回域名列表密文解密,剩下就正常调用接口
如果是 tcp ,然后应用层自定义协议,一般情况下, 和端口关系不大。可以排查一下,应用层协议本身是否存在问题,弱网环境会不会有问题。另外,就是检查网络防火墙,是不是有什么阻断规则,误判了苹果的审核 ip 。
19 天前
回复了 IIInsomnia 创建的主题 Go 编程语言 从 0 到 1 手撸一个协程池
@AEnjoyable
任务执行队列?
为什么要有任务队列,有任务需要执行,立刻就去执行就可以啊
控制任务量
一些场景下,可能要进行并发数量控制,但是这个属于并发数量控制的范围,和 pool 化 goroutine 是两个东西
对运行中的任务通过 ctx 控制
直接运行 goroutine 一样也可以 ctx 去控制
19 天前
回复了 IIInsomnia 创建的主题 Go 编程语言 从 0 到 1 手撸一个协程池
OP 水平可以,不过 goroutine 本身已经轻量级,还需要 pool 化吗?想不到需要 pool 化 goroutine 的场景
@FalconD 如果你不搞笑的话,请列出,分不清 cast 和 conversion 的事实,别做个无脑的喷子。
int 互转 bool , 就是应该被阻止的,当你看到 if ddd 时候, 你就可以断定,ddd 是个 bool 值, 而不是还有可能是个 int 。这样不是更清晰吗?搞不到为什么要 bool 能强转 int 。c/c++代码漏洞多不是没有原因的
32 天前
回复了 molvqingtai 创建的主题 程序员 如何实现分布式消息同步?
看过电报的群组聊天协议, 每条消息有一条 id ,这个 id 就是从 0 开始递增,每次+1 , 发消息,服务端每次+1 就可以了。对于客户端来说,它只要关注,群组 id 和 最后一条消息的 id 。客户端启动,建立 websocket 连接,带上自己的 last message id , 然后服务端,从这个 last id 开是这个客户端推送,这个同步要考虑,消息差了非常多,你需要设定一个阈值,超过这个阈值,就只取最后多少条消息。这块有个细节就是,要处理好,websocket 建立这段时间,出现新的消息,而导致的一些倒霉客户端没同步到这些最新消息的问题。你说的 etcd 这些用来实现存储一致性的,不适合你这种场景,你这种场景 mysql 就可以了,性能不够分库,就可以了。
47 天前
回复了 wencan 创建的主题 问与答 中文互联网怎么宣传自己的产品?
去试试豆瓣,直接给封号,还不能解封
48 天前
回复了 bli22ard 创建的主题 问与答 鼠标 dpi 的迷惑宣传
@Lynntox 是吧, 一般人 1000-3000 之间,不知道 2w 哪些高手可以驾驭
1  2  3  4  5  6  7  8  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1533 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 31ms · UTC 17:10 · PVG 01:10 · LAX 09:10 · JFK 12:10
Developed with CodeLauncher
♥ Do have faith in what you're doing.