当前位置: 首页 > 知识库问答 >
问题:

Akka流-将IO绑定流放到不同的分派程序上

丁长卿
2023-03-14

我的流有一个CPU绑定和IO绑定阶段的均匀混合(每个IO阶段后面都有一个CPU阶段)。我想要做的是将IO操作放在一个不同于流其余部分的分派程序上。

在一个传统的基于actor的Akka应用程序中,我可以将IO actor放在一个固定的线程池调度器上,它有很多线程,而将CPU绑定的actor放在一个fork join池上,它有少量的线程(一些是核数的倍数,理想情况下是1)。这将减少CPU绑定参与者在线程切换中浪费的时间,同时通过在IO上阻塞大量线程来提高吞吐量。

这样的认识对吗?若否,原因为何?如果是,那么我如何将我的IO绑定的阶段(流)与流的其余部分放在一个单独的分派器上呢?

我试过关闭自动保险丝,这确实有帮助。但它的吞吐量仍然比几乎等价的Akka同类产品要低得多。

共有1个答案

堵存
2023-03-14

默认情况下,流中的所有阶段都运行在同一个执行元上,您可以使用属性标记阶段应运行在单独的调度程序上,如下所示:

stage.withAttributes(ActorAttributes.dispatcher("dispatcher-name"))

这还将在该阶段周围引入异步边界,有效地在它自己的执行元中运行它。为了避免异步边界变得代价高昂,该阶段现在实际上将从上游一次发送16个元素的需求,因此您必须意识到这一点。

可以使用一个附加属性来调整缓冲区大小,在本例中,它的行为类似于融合的阶段,因为它一次请求一个元素,请注意,这可能会带来太多开销,这取决于用例。

stage.withAttributes(Attributes.inputBuffer(1, 1))
    null
 类似资料:
  • 我不确定这是否是正确的方法,或者即使这是一个好的方法,或者我是否应该使用一个actor与路由交互,使用ask模式,然后在actor内部流式处理所有内容。 有什么想法吗?

  • 小程序绑定流程 1. 为什么要做小程序授权绑定? 1) 将小程序授权给纷享销客,微纷享销客会自动帮助企业生成小程序,并提交给微信审核; 2) 每次功能更新能够自动提交审核,即便审核失败也能一键重新提交审核,省时又省力。 设置路径:小程序设置-基础设置 2。小程序绑定授权流程 Step1,点击进入“小程序设置-基础设置”,若没有小程序,请先完成小程序注册。 Step2,跳转至微信小程序授权页面,请需

  • 我有一个Akka Streams,我想根据谓词将其分成两个源。 例如。有一个源(类型被有意简化): 还有两种方法: 我希望能够拆分根据谓词,并将右侧部分传递给方法,左侧部分传递给方法。 我尝试使用拆分器,但它需要s结尾。

  • 我有一个包含不同大小记录的单一源CSV文件,它将每个记录推送到一个源主题中。我想将这些记录从源主题拆分成不同的KStreams/KTables。我有一个用于一个表加载的管道,在这里我将记录从源主题以分隔格式推送到stream1中,然后将记录推送到另一个AVRO格式的流中,再将该流推送到JDBC接收器连接器中,该连接器将记录推送到MySQL数据库中。管道需要相同。但我希望将不同表的记录推送到一个源主

  • 1. 什么是java序列化,如何实现java序列化? 我们有时候将一个java对象变成字节流的形式传出去或者从一个字节流中恢复成一个java对象,例如,要将java对象存储到硬盘或者传送给网络上的其他计算机,这个过程我们可以自己写代码去把一个java对象变成某个格式的字节流再传输,但是,JRE本身就提供了这种支持,我们可以调用OutputStream的writeObject()方法来做,如果要让j

  • InputStream类和OutputStream类在读写文件时操作的都是字节,如果希望在程序中操作字符,使用这两个类就不太方便,为此JDK提供了字符流。同字节流一样,字符流也有两个抽象的顶级父类,分别是Reader和Writer。其中Reader是字符输入流,用于从某个源设备读取字符,Writer是字符输出流,用于向某个目标设备写入字符。Reader和Writer作为字符流的顶级父类,也有许多子