go之golang 好用在多线程应用程序中吗
关闭。这个问题是opinion-based .它目前不接受答案。
想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.
2年前关闭。
Improve this question
我正在构建将创建大量线程的应用程序。每个线程将连接到不同的远程服务器,并且每个线程必须始终与它的服务器通信。
在我使用 PHP 之前,对于这样的目标,这是不好的解决方案。
我的观点原生线程是如何工作的:
例如,我们在单核上有 100 个线程。核心将在所有线程之间分配它的工作时间。
根据我的阅读和理解,这里是:
如果我开仓goroutines , 一个 goroutine可以阻止他人的执行goroutines .在特定情况下(可能在当前 goroutine 休眠或类似情况时),执行将被传递给其他人。但它不像本地线程那样工作。
我需要使所有线程都能流畅地执行。就像每个 goroutine 的相同处理器的时间.我不需要那些 goroutine正在执行很长时间,其他将等待..
我可以通过golang 来实现吗? ?或者更好地使用另一种语言(哪一种)?
请您参考如下方法:
并发是 Go 的主要优势之一。这并不意味着 Go 运行时可以神奇地解决所有问题和案例,并使您的所有代码闪电般快速。你可以用任何语言编写糟糕的代码。但是并发是内置在语言中的。它为您提供了几种语言工具,意味着轻松编写高效的并发代码,例如 goroutines、channels、select语句,同步原语。
goroutine 是一个轻量级线程。它比真正的 OS 线程成本低很多,并且多个 goroutine 可以多路复用到单个 OS 线程上。 spec defines它们作为“同一地址空间内的独立并发控制线程”。
Go 运行时能够毫无问题地处理数千甚至数十万个 goroutine。例如,HTTP server在标准库中,通过为每个请求启动一个新的 goroutine 来处理所有传入的请求。然而,对于典型的请求负载 (benchmark source),它每秒能够处理数万个请求。
所以总而言之,不要写“坏代码”。 goroutine 调度程序不是(完全)抢占式的,因此请确保您的 goroutines 不会进行会阻止调度程序运行其他 goroutines 的无意义计算。通常,系统调用、IO 操作符和阻塞操作(例如从 channel 发送/接收)是很好的屈服点。即使您不知道,许多代码也会在后台执行这些操作,因此大多数代码不会引起问题。如果您的某个 goroutine 必须进行大量计算,您可以随时调用 runtime.Gosched() 让出处理器,允许其他 goroutine 运行。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



