use*_*399 5 haskell haskell-pipes
我目前有它,所以有一个线程处理接受循环,一个主线程用于执行所有有状态逻辑的东西,然后每个连接客户端2个线程.一个客户端线程正在处理输入管道并使用管道并发将消息发送到主逻辑线程.另一个客户端线程正在处理输出管道,从主逻辑线程获取消息并将它们发送到客户端.
我这样做的理由是主逻辑线程可以使用工作线程对不可变状态进行纯计算,然后立即执行所有状态更改并使用新状态循环回来.这样我就可以使用多个CPU,而不必担心并发状态修改的问题.
STM /管道 - 并发的开销是否足够小,这是一种合理的方法,当我最终会有几千个连接的客户端每秒发送两到三条消息时?
Haskell绿色线程足够便宜,我肯定会推荐每个客户端2个线程的方法.在没有看到细节的情况下,我无法评论STM是否会成为瓶颈,但这取决于您的实施.假设它正确使用,STM绝对可以处理该级别的工作负载.