摘要: 转自https://blog.csdn.net/General_zy/article/details/117750221 阅读全文
posted @ 2025-03-18 10:31 仁义礼智信的 阅读(0) 评论(0) 推荐(0) 编辑
摘要: “Goroutine 到底是轻量级线程还是协程?”这个问题在技术社区中经常引发讨论,因为 Goroutine 的设计模糊了两者的界限。简单来说,Goroutine 在概念上更接近协程(coroutine),但在实现和行为上具有轻量级线程(lightweight thread)的特性。以下是详细分析, 阅读全文
posted @ 2025-03-18 08:40 仁义礼智信的 阅读(0) 评论(0) 推荐(0) 编辑
摘要: 线程切换的开销主要来源于操作系统在管理多个线程时需要执行的一系列操作,这些操作会消耗 CPU 时间和资源。相比协程的轻量级切换,线程切换是重量级的,因为它涉及内核态和用户态的转换以及更多的上下文管理。以下是线程切换开销的主要组成部分: 1. 上下文切换(Context Switch) 描述:当操作系 阅读全文
posted @ 2025-03-17 14:09 仁义礼智信的 阅读(3) 评论(0) 推荐(0) 编辑
摘要: 协程(coroutine)可以理解为一种协作式的线程。它不像传统的线程那样由操作系统调度,而是由程序自身控制执行的切换。协程通过协作的方式在特定点主动让出控制权,而不是被强制抢占,因此它的开销通常比线程更小,特别适合处理高并发、I/O密集型的任务。 在很多编程语言中,比如 Python(通过 `as 阅读全文
posted @ 2025-03-17 14:06 仁义礼智信的 阅读(2) 评论(0) 推荐(0) 编辑
摘要: package main import "fmt" type tester interface { test() string() string } type data struct { } func (*data) test() { fmt.Println("call test") } func 阅读全文
posted @ 2025-03-10 10:30 仁义礼智信的 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 图片中的内容总结了Go语言中方法和函数的区别,主要分为三个方面: 调用方式不同: 函数的调用方式:函数名(实参列表) 方法的调用方式:变量.方法名(实参列表) 普通函数的接收者类型限制: 对于普通函数,如果接收者是值类型,则不能将指针类型的数据直接传递给它;反之亦然。 方法的接收者类型灵活性: 对于 阅读全文
posted @ 2025-03-08 22:22 仁义礼智信的 阅读(2) 评论(0) 推荐(0) 编辑
摘要: package main import "fmt" type N int func main() { case1() fmt.Println() case2() fmt.Println() case3() } func case1() { var n N = 25 fmt.Printf("main. 阅读全文
posted @ 2025-03-05 14:41 仁义礼智信的 阅读(2) 评论(0) 推荐(0) 编辑
摘要: 下面的这个代码没看懂, f2 := (*N).test,解释一下 package main import "fmt" type N int func main() { case1() } func case1() { var n N = 25 fmt.Printf("main.n:%p,%v\n", 阅读全文
posted @ 2025-03-05 14:15 仁义礼智信的 阅读(2) 评论(0) 推荐(0) 编辑
摘要: package main import "fmt" func main() { case1() } func case1() { s := make([]int, 3) s[0] = 1 s[1] = 2 s[2] = 3 fmt.Printf("%p,%v\n", &s[0], s) append 阅读全文
posted @ 2025-03-05 13:39 仁义礼智信的 阅读(0) 评论(0) 推荐(0) 编辑
摘要: 我来帮你理解这段话,并解释为什么字符串也用 T,以及如何选择方法的 receiver 类型。 原话拆解 这段话是关于在 Go 中定义方法时,如何选择接收者(receiver)是值类型(T)还是指针类型(*T)的建议。让我们逐句分析: “要修改实例状态,用 *T” 意思:如果方法的目的是修改调用它的实 阅读全文
posted @ 2025-03-05 11:12 仁义礼智信的 阅读(3) 评论(0) 推荐(0) 编辑