Go语言 goroutine VS thread
goroutine,绕不开的一个话题是:它和 thread 有什么区别? 参考资料【How Goroutines Work】告诉我们可以从三个角度区别:内存消耗、创建与销毀、切换。 内存占用 创建一个 goroutine 的栈内存消耗为 2 KB,实际运行过程中,如果栈空间不够用,会自动进行扩容。创建一个 thread …
继续阅读记录 · 思考 · 实践
关于技术、生活,以及一路走来的观察。
goroutine,绕不开的一个话题是:它和 thread 有什么区别? 参考资料【How Goroutines Work】告诉我们可以从三个角度区别:内存消耗、创建与销毀、切换。 内存占用 创建一个 goroutine 的栈内存消耗为 2 KB,实际运行过程中,如果栈空间不够用,会自动进行扩容。创建一个 thread …
继续阅读源码分析 我们先来看一下接收相关的源码。在清楚了接收的具体过程之后,再根据一个实际的例子来具体研究。 接收操作有两种写法,一种带 “ok”,反应 channel 是否关闭;一种不带 “ok”,这种写法,当接收到相应类型的零值时无法知道是真实的发送者发送过来的值,还是 channel 被关闭后,返回给接收者的默认类型的零 …
继续阅读源码分析 发送操作最终转化为 chansend 函数,直接上源码,同样大部分都注释了,可以看懂主流程: // 位于 src/runtime/chan.go func chansend(c *hchan, ep unsafe.Pointer, block bool, callerpc uintptr) bool { // …
继续阅读数据结构 底层数据结构需要看源码,版本为 go 1.9.2: type hchan struct { // chan 里元素数量 qcount uint // chan 底层循环数组的长度 dataqsiz uint // 指向底层循环数组的指针 // 只针对有缓冲的 channel buf …
继续阅读在 C++ 开发中,使用 -fsanitize=address 编译器标志启用了 AddressSanitizer,这是一个功能强大的内存错误检测工具,用于检测各种内存相关的错误,包括但不限于内存泄漏、越界访问和使用后释放。这个工具是为了帮助开发者在开发阶段发现潜在的错误,以增强程序的稳定性和安全性。 …
继续阅读注:本文是普及金融市场交易的基础知识,不是为了鼓励大家去炒股炒币。相反,通过学习证券知识,理解衍生品原理,可以更好地认识市场风险,自觉放弃杠杆赌博暴富等不切实际的幻想,避免落入各种理财、带单、空气币等诈骗套路。本文一切内容均不构成任何投资意见或建议。 期货合约 合约交易,通常指期货合约。现货合约我们以后再讨论。这里我们 …
继续阅读在使用 gperftools 的 heap profiler 分析 C++ 程序的内存使用情况时,您可以生成多个内存分配描述文件(heap profiles),这些文件记录了程序在特定时间点的内存分配状态。通过对比这些描述文件(即进行 “diff” 操作),可以发现在两个时间点之间的内存分配差异。 具体来说,pprof …
继续阅读基于protobuf 的 rpc protobuf 实现了序列化部分,预留了 RPC 接口,但是没有实现网络交互的部分。 基于pb里面的 service 接口,自己实现实际的通信过程,实现一个简易的 rpc是比较容易的, 对我们阅读 brpc、muduo、grpc等著名开源的rpc有很大帮助。 google的 文档这里 …
继续阅读汇率跟什么有因素关系 1. 经济增速跟汇率相关吗? 顺周期货币:经济增速与汇率正相关的国家,外围地区国家:出售原材料的发展中国家 逆周期货币:经济增速与汇率负相关的国家,中心地区国家:日元、瑞士法郎、美元 人民币:从前是顺周期,过去20年表现为无周期,现在表现为逆周期 关于顺周期与逆周期: 在经济形势好的时候,利差交易 …
继续阅读问题: 设置到 LD_PRELOAD的动态库 找不到符号 在设置了优先加载的 动态库以后,先加载的库里面的函数与 后加载的库里面的函数可能是有冲突的,比如遇到的这个例子,先加在的动态库中其实不存在完整的函数实现,只有符号表,并不能执行,但是它被设置成先加载了。 对于有多个动态库中存在同一个符号的,一定程度上,我们可以从 …
继续阅读