【发布时间】:2015-07-16 12:25:34
【问题描述】:
编辑:这是 Does Akka Tcp support full-duplex communication? 的重复(请不要多次问同一个问题,在邮件列表中重复也是如此,这浪费了那些自愿提供帮助,减少您将来获得答案的机会)
我已经从https://github.com/akka/akka/blob/master/akka-docs/rst/scala/code/docs/io/EchoServer.scala#L96修改了 Echo 服务器
case Received(data) =>
connection ! Write(data, Ack(currentOffset))
log.debug("same {}", sender.eq(connection)) // true
buffer(data)
这意味着传入和传出消息由同一个参与者处理。因此,单个工作线程(从邮箱中获取消息)将处理读写操作。看起来像一个潜在的瓶颈。
在“经典”世界中,我可以创建一个线程从套接字读取,另一个线程用于写入并获得同时通信。
更新 google群内讨论https://groups.google.com/forum/#!topic/akka-dev/mcs5eLKiAVQ
【问题讨论】:
-
是什么让你认为只有一个线程处理实际的低级连接?
-
一个线程处理来自actor邮箱的消息(如果你愿意,我会给你一个文档链接)。可能线程不会消耗很多周期来处理消息,但无论如何,与读写线程方法相比,它是一个潜在的瓶颈。
-
没有瓶颈,如果缓冲区在 TCP 级别已满/空,它将在发送或接收时阻塞。如果您不希望这样,您需要使用 select 来检查套接字是否可写或可读。
标签: multithreading scala sockets tcp akka