Akka.io TCP是否具有双向交流中的瓶颈



edit:这是Akka TCP支持Fulluplex Communication的重复性吗?(请不要多次问相同的问题重复邮件列表,这浪费了那些自愿提供帮助的人的时间,减少了您将来获得答案的机会)


我已经从https://github.com/akka/akka/blob/master/master/akka-docs/rst/scala/code/code/docs/io/echoserver.scala#l96

修改了回声服务器。
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

虽然有一个演员在任何给定时间点上读或写作,但这些操作中的每一个都需要很少的周期可写的空间。系统调用〜1µs的呼叫开销意味着,默认缓冲尺寸为128KIB,您应该能够总共转移多达100gib/s,这肯定是瓶颈,但可能不是今天和实践中(这大致与典型的CPU相吻合带宽,因此无论如何目前不可能更多的数据速率)。一旦改变了这种变化,我们就可以在不同的选择器之间分配阅读和写作职责,并唤醒不同的参与者,但是在这样做之前,我们需要验证实际上有可测量的效果。

需要回答的另一个问题是哪种操作系统内核实际上允许从多个线程中的单个套接字上同时操作。我尚未研究此事,但是我不会惊讶地发现完全独立的锁定将很难做,并且可能没有()也没有理由花费这一努力。

最新更新