当前位置: 首页 > 面试题库 >

Netty 4:高低写水印

严修谨
2023-03-14
问题内容

我正在使用Netty4。我看到Netty服务器的以下选项:WRITE_BUFFER_HIGH_WATER_MARK和WRITE_BUFFER_LOW_WATER_MARK。

官方页面“ 相关文章”链接到Norman
Maurer的Ne​​tty最佳实践(带有视频的幻灯片)
。其中一张幻灯片如下所示:

ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.childOption(ChannelOption.WRITE_BUFFER_HIGH_WATER_MARK, 32 * 1024);
bootstrap.childOption(ChannelOption.WRITE_BUFFER_LOW_WATER_MARK, 8 * 1024);

并具有以下序言:

设置健全的WRITE_BUFFER_HIGH_WATER_MARK和WRITE_BUFFER_LOW_WATER_MARK

但是,WRITE_BUFFER_HIGH_WATER_MARK和WRITE_BUFFER_LOW_WATER_MARK是什么?以及如何使他们 理智

我没有找到任何明确的信息。谢谢你的帮助。


问题答案:

有关从水印的一些信息本文章:

例如,假设您在服务器端有一个由客户端填充并由后端处理的任务队列。如果客户端发送任务的速度过快,则队列的长度会增加。需要引入所谓的高水印和低水印。如果队列长度大于高水位标记,请停止从套接字读取,并且队列长度将减少。当队列长度小于低水位标记时,再次开始从套接字读取任务。

请注意,为了使客户能够适应您的处理任务(实际上是适应窗口大小)的速度,不应在高水位线和低水位线之间留出较大的差距。另一方面,小间隙意味着您经常会在事件循环中添加/删除套接字。

对于Netty而言,这似乎是真的,因为此
JavaDoc ChannelConfig表示:

如果写缓冲区中排队的字节数超过writeBufferHighWaterMark值,
Channel.isWritable()将开始返回false。

对于低水印:

一旦在写缓冲区中排队的字节数超过了高水位线,然后下降到该值以下,Channel.isWritable()将再次返回true。

关于理智,我认为这是一个相对的问题,取决于您通过渠道发送的信息以及发送频率。对于必须为该变量定义什么值,没有严格的规则。因此,我认为,您必须在实践中找到自己的价值观。幻灯片向您展示了其中的示例之一。



 类似资料:
  • dubbo 2.5.6版本新增了对netty4通信模块的支持,启用方式如下 provider端: <dubbo:protocol server="netty4" /> 或 <dubbo:provider server="netty4" /> consumer端: <dubbo:consumer client="netty4" /> 注意 provider端如需不同的协议使用不同的通信层框架,

  • 问题内容: 我在开发机(单个笔记本)中使用Elasticsearch 1.4.4。一切都设置为默认设置,因为我从未更改任何设置。 启动它时,通常会收到以下消息: 我看到很多这样的“磁盘低水印…超出…”消息。我的情况出了什么问题?如何解决?谢谢! 更新 在这篇文章之前,我在SO中搜索了相关的文章。我发现一个与“高水印…”有关的情况,在这种情况下,磁盘空间不足。就我而言,我检查 了磁盘上是否还有56G

  • 我在我的开发机器(一个笔记本)中使用Elasticsearch 1.4.4。一切都设置为默认值,因为我从未更改任何设置。 当我启动它时,通常会收到以下信息: 我看到很多这样的“低磁盘水印…超过了…”信息。我的案子出了什么问题?如何修复它?谢谢 使现代化 在这篇文章之前,我搜索了相关的帖子。我发现了一个与“高水位线”有关的在这种情况下,磁盘空间很小。在我的情况下,我检查了一下,我的磁盘上还剩下56G

  • 问题内容: 假设有工资表: 我目前正在使用此代码(AutoIT脚本: 因此,如果Hour_number在低小时或高小时之间,那两个查询是完美的。我需要某种查询,它基本上会执行以下操作: 然后将其重复为“默认”,因为找不到该员工。 补充:如果仅通过1个查询未找到$ Employee,是否可以尝试使用“ Default”? 问题答案: 如果仅通过1个查询未找到$ Employee,是否可以尝试使用“

  • 问题内容: 什么是高/低算法? 我已经在NHibernate文档中找到了这一点(这是生成唯一密钥的一种方法,第5.1.4.2节),但是我没有找到有关其工作原理的很好的解释。 我知道Nhibernate可以处理它,并且我不需要了解内部,但是我很好奇。 问题答案: 基本思想是,您有两个数字组成主键-“高”数字和“低”数字。客户端可以从本质上增加“高”序列,知道它随后可以安全地从先前的“高”值的整个范围

  • 问题内容: 所以,我有这个: 这样,我的ticket_priority_id列就被排序为med,low,high。我想要的是低,中,高。我想知道如何去做? 问题答案: