go除了gc效率比.net高,别的方面是c#的子集。
比如channel。go的channel主要是pipe概念拼上个select。c#有Rx.NET,是pipe加上了linq那一堆操作(select、where、Distinct、Skip、Sum等),并且支持线程调整,比go的channel强大很多。
Rx.NET也是微软出的,事实上是linq2.0
再比如协程。go的协程,看起来就是Windows xp里面新加的那个QueueUserWorkItem api。这个api也能被c++调用,微软都扔进legacyapiset里面了。
下面列出的场景是c#全部支持的,每个场景后面给的是c#相关的搜索关键字。go的协程我并不敢说非常熟悉,也许会有个别go也能支持的,但下面大部分场景go应该都不支持。
1.一个线程(协程)能不能等待另外一个协程的返回值?await
2.协程结束能不能回到当前线程?(回到ui线程)await
3.能不能等待一批协程一起返回?Task.whenall
4.协程出异常了通知调用者?throw
5.协程链。ContinueWith
6.abort协程。CancellationToken
7.协程对线程的对应模型,能不能既要防止线程创建颠簸,又要防止慢热?threadpool.setminthreads
8.可不可以自定义, 协程对线程的对应模型?TaskScheduler
9.语法糖,并发若干数目的协程处理集合。parallel LINQ,parallel.for,parallel.foreach。java抄了一个过去,好像叫什么stream。
10.协程first class化并在其上做集合有关的操作。Dataflow。这个是c#做的非常强大的一个功能,提供了协程的二阶操作。互联网常见的限流操作用这个也就是几行代码。
还有一些比如互斥原语什么的就不细说了。这些其实是.net的功能,f#、vb等语言也都可以调用
【 在 javafish 的大作中提到: 】
: golang笑而不语
:
--
FROM 123.115.136.*