5

我目前拥有它,因此有一个线程处理接受循环,一个主线程用于执行所有有状态逻辑的东西,然后每个连接的客户端有 2 个线程。一个客户端线程正在处理输入管道并使用管道并发将消息发送到主逻辑线程。另一个客户端线程处理输出管道,从主逻辑线程获取消息并将它们发送到客户端。

我这样做的理由是,主逻辑线程可以使用工作线程对不可变状态进行纯计算,然后一次完成所有状态更改并循环返回新状态。这样我就可以使用多个 CPU,而不必担心并发状态修改的问题。

STM/管道并发的开销是否足够小,以至于当我最终有几千个连接的客户端每秒发送两到三个消息时,这是一种合理的方法?

4

1 回答 1

5

Haskell 绿色线程足够便宜,我肯定会推荐每个客户端使用 2 个线程的方法。在没有看到细节的情况下,我无法评论 STM 是否会成为瓶颈,但这取决于你的实现。如果使用正确,STM 绝对可以处理这种级别的工作量。

于 2014-02-11T07:14:34.980 回答