【问题标题】:async-await vs goroutines + channel, which is better performence for handling many WebSocket connection?async-await vs goroutines + channel,处理许多 WebSocket 连接的性能更好?
【发布时间】:2022-02-05 19:53:41
【问题描述】:

大多数人认为 goroutine 比 async/await 更好。因为 goroutine 结合了并行和并发。但我所知道的是 node js 本身并不是一个真正的单线程。因为每个 i/o 进程都委托给 libuv。而 libuv 本身是多线程的。

那么 node.js 中的 async/await 和 goroutine 之间哪个更好,在这种情况下,是处理一百万个 WebSocket 连接?

【问题讨论】:

    标签: node.js async-await goroutine


    【解决方案1】:

    要正确回答这个问题,我们需要进行基准测试,以获得真实结果并进行比较,但我们可以考虑一下。

    首先,libuv 有一个线程池来处理异步操作,但它不是无限池(如果我没记错的话,libuv 默认有 4 个线程)并且每个线程每次可以处理一个异步操作。

    另一方面,Golang 使用“绿色线程模型”,每个 goroutine 都是一个独立的进程,每次处理一个操作。从理论上讲,您可以为每个操作系统线程生成多少个 goroutine。

    每个运行时都有优点和缺点,也许我们可以找出哪个运行时更好,但我认为真正的问题是“我们将如何管理应用程序的水平可伸缩性”。我们需要根据我们的部署策略和团队的知识来选择运行时。

    【讨论】:

    • Goroutines 在 OS 线程上也是多路复用的,所以它与节点为 I/O 所做的事情并没有太大区别。
    • Goroutines 有点不同,因为你可以只使用一个操作系统线程来实现并行性。另一方面,NodeJ 需要更多的操作系统线程来为我们提供“相同的功能”
    猜你喜欢
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2021-01-21
    • 1970-01-01
    • 2018-09-03
    相关资源
    最近更新 更多