async-await vs goroutines + channel,哪个在处理多个 WebSocket 连接时性能更好?
async-await vs goroutines + channel, which is better performence for handling many WebSocket connection?
大多数人认为 goroutine 比 async/await 更好。因为 goroutines 结合了并行和并发。但我所知道的是node js本身并不是真正的单线程。因为每个 i/o 进程都委托给了 libuv。并且 libuv 本身是多线程的。
所以 node.js 中的 async/await 和 goroutine 哪个更好,在这种情况下,是处理一百万个 WebSocket 连接?
为了正确回答这个问题,我们需要做一个基准测试,得到真实的结果并进行比较,但我们可以稍微考虑一下。
首先,libuv 有一个线程池来处理异步操作,但不是无限池(如果我没记错的话,默认情况下 libuv 有 4 个线程),每个线程可以处理一个异步操作时间.
另一方面,Golang 使用“绿色线程模型”,其中每个 goroutine 都是一个孤立的进程,每次处理一个操作。理论上,您可以在每个 OS 线程中产生多少个 goroutine。
每个运行时都有优缺点,也许我们可以找出哪个运行时更好,但我认为真正的问题是“我们将如何管理应用程序的水平可伸缩性”。我们需要根据我们的部署策略和我们团队的知识来选择运行时。
大多数人认为 goroutine 比 async/await 更好。因为 goroutines 结合了并行和并发。但我所知道的是node js本身并不是真正的单线程。因为每个 i/o 进程都委托给了 libuv。并且 libuv 本身是多线程的。
所以 node.js 中的 async/await 和 goroutine 哪个更好,在这种情况下,是处理一百万个 WebSocket 连接?
为了正确回答这个问题,我们需要做一个基准测试,得到真实的结果并进行比较,但我们可以稍微考虑一下。
首先,libuv 有一个线程池来处理异步操作,但不是无限池(如果我没记错的话,默认情况下 libuv 有 4 个线程),每个线程可以处理一个异步操作时间.
另一方面,Golang 使用“绿色线程模型”,其中每个 goroutine 都是一个孤立的进程,每次处理一个操作。理论上,您可以在每个 OS 线程中产生多少个 goroutine。
每个运行时都有优缺点,也许我们可以找出哪个运行时更好,但我认为真正的问题是“我们将如何管理应用程序的水平可伸缩性”。我们需要根据我们的部署策略和我们团队的知识来选择运行时。