首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.net Async和google go轻量级线程的主要区别是什么

.net Async和google go轻量级线程的主要区别是什么
EN

Stack Overflow用户
提问于 2011-09-20 10:02:02
回答 1查看 6K关注 0票数 23

在go中调用runtime.GOMAXPROCS(1)时,运行时将只对所有goroutines使用一个线程。在执行io时,您的goroutines将会让步,并让其他goroutines在同一线程上运行。

在我看来,这与.net Async CTP特性在不使用后台线程的情况下如何进行协作并发非常相似。

我的问题是,你认为一种方法比另一种方法有什么优点或缺点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-20 12:07:29

做出价值判断总是一件棘手的事情,所以我将强调三个不同点。你决定他们是属于“支持”还是“反对”。

  1. 虽然Go和async都允许你以一种直接的方式编写异步代码,但在.NET中,你必须知道代码的哪一部分是异步的,哪一部分不是(即你必须显式地使用async/await关键字)。在Go中你不需要知道这一点-运行时让它“只是工作”,没有特殊的语法来标记异步代码。
  2. Go的设计不需要在标准库中有任何特殊的代码。.NET需要为每个异步操作向标准库添加新代码,本质上是两倍于这些情况的API,例如,有新的异步http下载API和旧的、非异步http下载API必须保留用于向后的compatibility.
  3. Go设计和实现更简单的数量级。一小段运行时代码(调度器)负责挂起阻塞系统调用的goroutines,并让位于休眠goroutines。在标准库中不需要任何特殊的异步支持。

.NET实现首先需要添加前面提到的新API。此外,.NET的实现是基于编译器将带有async/await的代码重写为等效的状态机。它非常聪明,但也相当复杂。实际的结果是,第一个异步CTP有已知的错误,而Go的实现从一开始就工作得很好。

归根结底,这并不重要。async/await是在.NET中编写异步代码的最佳方式,Goroutines是在Go中获得异步代码的最佳方式。这两种语言都很棒,特别是与大多数其他语言的替代语言相比。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7479276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档