C# .NETAsync和GoogleGo轻量级线程之间的主要区别是什么
在go中调用runtime.GOMAXPROCS(1)时,运行时将仅为所有goroutine使用一个线程。在执行io时,您的goroutine将让步,并让其他goroutine在同一线程上运行 如果不使用后台线程,.NETAsyncCTP特性如何实现协作并发,这与我的想法非常相似C# .NETAsync和GoogleGo轻量级线程之间的主要区别是什么,c#,.net,asynchronous,go,.net-4.5,C#,.net,Asynchronous,Go,.net 4.5,在go中调用runtime.GOMAXPROCS(1)时,运行时将仅为所有goroutine使用一个线程。在执行io时,您的goroutine将让步,并让其他goroutine在同一线程上运行 如果不使用后台线程,.NETAsyncCTP特性如何实现协作并发,这与我的想法非常相似 我的问题是,你认为一种方法比另一种方法有哪些优点或缺点。做出价值判断总是一件棘手的事情,因此我将强调三个不同之处。你决定他们是属于“赞成”还是“反对”的范畴 虽然Go和async都允许您以简单的方式编写异步代码,但在.
我的问题是,你认为一种方法比另一种方法有哪些优点或缺点。做出价值判断总是一件棘手的事情,因此我将强调三个不同之处。你决定他们是属于“赞成”还是“反对”的范畴
最终,这并不重要。async/await是在.NET中编写异步代码的最佳方法。Goroutines是实现这一目标的最佳方式。这两种语言都很好,尤其是与大多数其他语言的备选语言相比。非常好的回答,谢谢。对于一些需要在两种语言之间进行选择的人,我更多地考虑执行速度性能。我不确定我是否同意。您可以使用C#和Java编写go风格的Goroutine,方法是使用每个进程的线程(通道只是同步队列)。在许多情况下,您并不关心In-Go-goroutine跨几个操作系统线程进行多路复用的事实。C#async向您承诺,某些代码将在同一操作系统线程中运行,这对于UI线程来说非常好。使用go无法获得这样的承诺。@Elazar:对于确保在UI线程上运行的特定情况,您可以在go()中使用LockOSThread()。没有太多细节,你的评论是误导性的。您希望WAIT语句的主体在非UI线程上运行,以便IO上的长时间计算或阻塞也不会阻塞UI线程。有时,出于线程安全考虑,您必须在UI线程上运行代码的其余部分。wait使这样的代码易于编写。在Go中,Go语句也有同样的功能,您可以协调UI线程与通道上的消息。@Kugel:在Go中使用wait/async没有意义,就像在C#中使用Go的Go语句没有意义一样。这些都是需要编译器和运行时支持的语言级功能。这两种语言都不够灵活,无法从另一种语言复制这样的基本设计。他们不一定是。async/await是编写正常并发代码的C#解决方案。Goroutines是Go对同一问题的解决方案。使用给定语言提供的最佳解决方案,而不是从另一种语言中寻找解决方案的精确副本。@KrzysztofKowalczyk:我最后一句话太苛刻了。我应该说“围棋很难做到这一点”。在LockosThreadWiki中:“Go的运行时为此提供了LockOSThread()函数,但众所周知,它很难正确使用”。Go在背后管理OS线程,因此很难控制哪个函数在哪里运行。通常这是一个好主意,但有时您关心哪些操作系统线程运行什么。我不明白我的评论有什么误导性。据我理解,C#wait就像在一个线程上运行一组goroutine。你不可能那么容易进入围棋。