A value of a pointer type whose base type is T can only store the addresses of values of type T.
go的指针简化了指针的使用,减少了指针出错的概率 。
引用可看做是指针的抽象,也基于code safe的理由,不能在引用上做算术运算和低级别的取巧 。
从这个意义上看,C#的引用等价于go的指针,都是类型安全的指针 。
另一方面,两种语言都提供了对内存进行任意读写的姿势(非代码安全) 。
go的unsafe.Pointer本质是一个int指针 。
C#type Pointer *ArbitraryType
、type ArbitraryType int
unsafe
关键字可用在函数、属性、构造函数、代码块 。文章插图
5. goroutine vs async-await表象
- goroutine由go的原生函数生成,只要前面加上go的语法关键字
go
(可以有形参,返回值会被忽略) 。 - await/async语法糖,简化了异步编程的姿势;实际会被编译器编译成一个状态机 。
核心对比首先要知道: 线程是cpu调度的基本单位,不管是goroutine还是async-wait机制都是在尝试提高[cpu调度线程的效率] 。
- go在os内核线程之上,原生支持了轻量级的用户态线程goroutine,堆栈很小,开销很小,(存在一个用户态逻辑处理器给线程投喂goroutine) 。
- C#编译器生成的状态机,转化并管控基于线程池线程的主调任务、异步任务、后继任务 。
go: 内核态线程切换开销大,故原生提供用户态线程,开销极小,天然支持高并发,且不轻易坠落到内核态,是一个革命派的思路 。
C#:async-await针对线程做辗转腾挪,高效利用,是一个改良派的思路 。
异步都具备异步的能力,go语言没有await的概念,goroutine在等待通道读操作时[挂起自身,并将OS线程释放给另一个goroutine],跟C#执行时遇到await关键字的行为效果是一样的 。
推荐附加阅读
- https://grantjam.es/concurrency-comparing-golangs-channels-to-c-sharps-asyncawait/
- https://techstacks.io/posts/6628/go-vs-csharp-part-1-goroutines-vs-async-await
【闻道Go语言,6月龄必知必会】
经验总结扩展阅读
- 6岁儿童语言发育迟缓应怎样预防
- 学汉语言文学后悔吗 毕业后找什么工作
- 汉语言文学真的没有出路吗 毕业找什么工作
- 汉语言文学专业就业方向 就业前景怎么样
- 汉语言文学学什么内容 包含哪些课程
- 为什么学汉语言文学专业 毕业后有出路吗
- 学汉语言文学有后悔的吗 就业前景好吗
- C语言基础--数组
- 汉语言文学是不是很难学 未来发展好吗
- 汉语言文学学什么课程 主要课程有哪些