【发布时间】:2018-08-22 08:25:34
【问题描述】:
我刚刚开始学习围棋。 Go 的优势在于处理多个并发连接的 goroutines。有人提到了
Goroutines 可以被认为是轻量级线程(但实际上不是线程),它可以增加/缩小堆栈大小,并且这些线程被多路复用到多个 os 线程中。假设你有 1000 个 goroutine,那么这些 goroutine 会根据 goroutine 的阻塞和等待模式被调度到本机操作系统线程。
基本上,我来自 C# 和 Nodejs 背景。我很困惑它与用 C# 实现的 TaskParallelLibrary 有何不同。
TaskParallelLibrary 隐藏了创建和管理线程的复杂性。您只需启动一个任务,CLR 就会负责将它们映射到本机线程。在这里,您可以创建数以千计的微型任务,这些任务被映射并安排到操作系统线程。然而,TPL 专门解决了异步问题。
我的问题是 TPL 与 goroutines 有何不同? goroutines 使用协程(可暂停函数还是?)。 TPL 还将 async/syscalls 操作多路复用到线程池,甚至 Go 也将 syscall 多路复用到线程池。
如果我的任何假设是错误的,请纠正我。任何人都可以帮助我实现的具体不同之处吗?为什么 goroutine 声称比 TPL 更快?
【问题讨论】:
-
goroutines 在哪里声称比 TPL 更快?
-
@Adrian 我已经提到如果我的假设是错误的,请纠正我。对不起,这是我的假设
-
引用的关于 Go 的段落指出,goroutines 比 threads 更有效,它们确实如此。我不知道有任何官方声明将 goroutines 与 TPL 进行比较。
-
@Adrian 你认为 goroutines 和 TPL 是一回事吗?
-
不,goroutines 是 Go 的一个特性,TPL 是 C# 的一个特性,它们是相同基本编程概念的完全独立和不同的实现。我认为没有人会声称它们是相同的,尽管有些人可能会声称它们大致相同。
标签: c# multithreading go task-parallel-library