V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  sztink  ›  全部回复第 1 页 / 共 2 页
回复总数  30
1  2  
mkdocs
109 天前
回复了 yann123 创建的主题 程序员 职业选择
选 k8s 。阵列卡,感觉行业太窄了。搞了 k8s ,后面跳槽可选的公司相对也多。
109 天前
回复了 yann123 创建的主题 程序员 职业选择
raid 是什么?
110 天前
回复了 dyllen 创建的主题 Go 编程语言 广域网 udp 组播如何发送数据?
1. 发送方不需要加入多播(也叫组播)组,可以直接发送消息
2. 接收方需要加入多播组中,才能接收到消息。多播是支持广域网的,现实中限制条件太多,更多的用在局域网。

欲了解详细的基础知识可以看《 UNIX 网络编程 卷 1:套接字联网 API 》一书。这里有这本书的笔记: https://note.cyub.vip/unp-v1/

Go 语言可以参考 ssdp 协议的 go 实现: https://github.com/koron/go-ssdp/blob/main/internal/multicast/multicast.go#L68-L91
139 天前
回复了 FreeWong 创建的主题 Go 编程语言 === 一个 golang goroutine 相关的问题 ===
@sztink 死锁是指多个进程互相等待对方释放资源而无法继续执行的状态,而阻塞等待是指进程由于资源不可用而暂停执行,但资源一旦可用便能继续执行。
139 天前
回复了 FreeWong 创建的主题 Go 编程语言 === 一个 golang goroutine 相关的问题 ===
sorry 。漏看了 fmt.Scanln(),搞成程序后面会退出。main 里面的 fmt.Scanln()一直等待内容输入,另外两个 goroutine 会一直阻塞挂起等待 ch 可写入,他两不是死锁。
139 天前
回复了 FreeWong 创建的主题 Go 编程语言 === 一个 golang goroutine 相关的问题 ===
原因是 main 所在的主协程执行完毕后,会调用 exit_group 系统调用,exit_group 系统调用会 exit 出所有线程,这也就意味着程序的终止。程序都终止了,就不要谈什么阻塞不阻塞了。

底层实现代码见: https://github.com/cyub/go-1.14.13/blob/master/src/runtime/proc.go#L202-L229 ,代码简单分析下:

fn := main_main // 是 main 函数的一个 wrapper ,main_main 里面会调用 main 包里面的 main 函数
fn() // 执行 main_main 函数

此处省略其他代码...

exit(0) // 调用系统调用 exit_group ,退出程序
for {
var x *int32
*x = 0 // 由于 x 没有分配内存,此处一定会发生段错误。当然当执行 exit(0)后,理论上也不会进入到这个 for 循环的,这里面可能是为了保险起见吧。
}

另外我们可以使用 gdb 捕获 exit_group 系统调用,观察整个过程。怎么捕获系统调用,可以看这个 https://go.cyub.vip/analysis-tools/gdb/#%e4%b8%ba%e7%b3%bb%e7%bb%9f%e8%b0%83%e7%94%a8%e8%ae%be%e7%bd%ae%e6%8d%95%e8%8e%b7%e7%82%b9

然后执行 gdb 的 bt ,查看 backtrace 信息。
194 天前
回复了 afxcn 创建的主题 Go 编程语言 使用 go 遇到的一个奇怪问题,求教
@afxcn 这样是解决不了本质问题的。因为 rand.NewSource 不是并发安全的。另外 createRand 中_seededRand 初始化的逻辑也不是并发安全的。你应该直接用全局函数 rand.Intn()。
194 天前
回复了 afxcn 创建的主题 Go 编程语言 使用 go 遇到的一个奇怪问题,求教
靠,你这生成随机字符代码难怪看着眼熟,我前段时候从网络上 copy 的一份跟你的几乎一模一样,我得赶紧 fix 一下。copy 来源: https://github.com/BelphegorPrime/lib/blob/master/RandString.go
有必要。每台设备只订阅带自己设备 ID 的 topic ,能够很方便做访问控制,保证安全。举个例子,如果你设备 ID 都泄露了,如果此时 hacker 只需拿到它当前设备里面的 mqtt 账号信息,就可以模拟给其他设备发生消息了。如果设备只订阅带自己设备 ID 的 topic ,服务器侧可以很容易设置 ACL 规则,只允许每台设备只能访问和发送消息到它自己的 topic ,hacker 就很难攻击了
222 天前
回复了 rockyliang 创建的主题 Go 编程语言 关于 golang 官网一段代码的疑惑
编译器优化也是有可能的,不同版本 go 编译器编译有差异的。编译优化可以看看这篇文章:Golang 编译器优化那些事: https://fanlv.fun/2021/12/18/golang-complier-optimize/
222 天前
回复了 rockyliang 创建的主题 Go 编程语言 关于 golang 官网一段代码的疑惑
OP 的猜测是一种可能情况:done=true 没有同步到其他核心导致了死循环。所以 go 官方提供了 atomic.Storexxx()函数来保证原子性和可见性。

Storexxx()函数底层使用 XCHGQ 指令,该指令默认带有 lock 前缀指令的功能,会强制其他核心重新刷新缓存。我们常说的 atomic 包提供了原子操作,其实它也保证了可见性。对于 64 系统下,只要内存对齐(不会发生撕裂写),简单的赋值语句是原子性的( mov 指令),但他没法保证可见性,即当前核心的写入,没有立即被其他核心可见,所以你得需要 Storexxx()语句。

atomic 包的 Storexxx()函数和 Addxxx() 函数底层指令可以比较看看:
https://go.godbolt.org/z/o5jn4GG5K // Storexxx 使用 XCHGQ 指令,该指令默认有 lock 功能。
https://go.godbolt.org/z/rc5Y37q3P // Addxx 使用 lock 指令 + XADD 指令。多了 lock 前缀指令,来保证可见性。
@codsddos 服务器欠费了。现在可以了。
[https://www.cyub.vip]( https://www.cyub.vip)
再贴一次: [https://www.cyub.vip]( https://www.cyub.vip)
再贴一次,之前不可直接点击: [https://www.cyub.vip]( https://www.cyub.vip)
贴一下我的博客: https://www.cyub.vip/ 。 写的内容不多,但一直未间断过。
237 天前
回复了 nnegier 创建的主题 C 还是不太理解 C 静态库和动态库?
总结一下动态库存在的意义有:
1. 代码复用和模块化:动态库提供了一种代码复用的机制,可以将常用的功能封装在库中,多个程序可以共享同一个库,避免了重复编写相同的代码,提高了开发效率。

2. 节省内存空间:多个程序可以共享同一个动态库文件,这意味着在内存中只需要加载一份动态库代码,而不是每个程序都有一份拷贝,因此可以节省内存空间。

3. 简化更新和维护:如果需要更新动态库中的功能或修复其中的 bug ,只需要更新动态库文件,而不需要重新编译和部署整个程序。这简化了更新和维护过程,减少了可能的错误。
@lvlongxiang199 大佬呀👍🏻,你对 go 理解很深呀。 感谢给出建议。
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2491 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 25ms · UTC 15:46 · PVG 23:46 · LAX 07:46 · JFK 10:46
Developed with CodeLauncher
♥ Do have faith in what you're doing.