返回顶部
首页 > 资讯 > 后端开发 > GO >C# 任务 async/await 与 Golang 的 goroutine
  • 379
分享到

C# 任务 async/await 与 Golang 的 goroutine

2024-02-10 05:02:44 379人浏览 薄情痞子
摘要

PHP小编百草今天将为大家介绍C#语言中的任务 async/await与golang语言中的Goroutine。这两种技术都是用于实现并发编程的方法,能够在处理并发任务时提供更加简洁和

PHP小编百草今天将为大家介绍C#语言中的任务 async/await与golang语言中的Goroutine。这两种技术都是用于实现并发编程的方法,能够在处理并发任务时提供更加简洁和高效的解决方案。通过使用async/await和goroutine,开发者可以轻松地编写出高性能、高并发的程序,从而提升应用程序的响应速度和用户体验。让我们一起来了解一下这两种技术的特点和使用方法吧!

问题内容

学习 C# 和 Golang 已经有一段时间了,并尝试比较它们支持异步编程的方式。

我对 goroutine 的了解是,go 运行时可以安排 goroutine 在不同的物理/机器线程上运行。如果一个 goroutine 被阻塞(例如,同步等待 I/O),go 运行时可以挂起该 goroutine 并释放物理线程来运行其他 goroutine。

C# Task 与 goroutine 类似,因为它也是物理线程之上的抽象。然而,在 async Task 内进行阻塞 I/O 被认为是一个坏主意,因为“整个线程将被阻塞,导致死。 C#运行时不能做一些类似于goroutine的事情来挂起被阻塞的async Task并释放物理线程来运行其他async Tasks吗?

我已经为这个问题苦苦挣扎了一段时间,但找不到更好地解释这个问题的公共材料。也许我的理解不正确。有人可以帮我吗?

解决方法

C# 任务与 goroutine 类似,因为它也是物理线程之上的抽象。

从极高的角度来看,是的,它们可能很相似。

但是,在异步任务中进行阻塞 I/O 被认为是一个坏主意,因为“整个线程将被阻塞,导致死锁”。

阻塞并不一定会导致死锁,但阻塞会阻塞调用线程,直到任务完成。这就是重点。

C# 运行时不能做类似于 goroutine 的事情来挂起阻塞的异步任务并释放物理线程来运行其他异步任务吗?

异步方法只需使用 await 即可获得您想要的行为。阻塞专门用于阻塞线程。从概念上讲,goroutine 有点像让每个方法都为 async 并在各处隐式使用 await

在更一般的情况下,C# 运行时会执行类似于 goroutine 的操作来处理任何阻塞:由于向后兼容性,C# 运行时无法轻松执行此操作。还有很多遗留代码依赖于“特殊线程”(UI 线程、COM STA 线程等),其中绿色线程/协程方法会更加困难。 Go 通过创建一个全新的生态系统基本上避免了向后不兼容的问题。

以上就是C# 任务 async/await 与 Golang 的 goroutine的详细内容,更多请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: C# 任务 async/await 与 Golang 的 goroutine

本文链接: https://lsjlt.com/news/562916.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作