我有一个服务器读取入站换行符分隔的字符串。管道看起来像这样:
...
pipeline.addLast("framer",
new DelimiterBasedFrameDecoder(65535, Delimiters.lineDelimiter()));
// plain old strings
pipeline.addLast("decoder", new StringDecoder());
// callback to handler
pipeline.addLast("handler", new ConnectorHandler(collector));
...当我将解码器更改为以下内容时:
pipeline.addLast("framer",
new DelimiterBasedFrameDecoder(65535,
new ChannelBuffer[] { ChannelBuffers.wrappedBuffer(
new byte[] {'\n'})})); 我的服务器速度提高了3-4倍。我不明白为什么会这样。入站字符串的长度在1K-4K之间变化,约为10K字符串/秒。看一下源代码,它似乎循环遍历所有分隔符,以找到产生最小帧长度的分隔符--通过检查,我看不出只寻找一个分隔符怎么会比寻找两个分隔符带来这样的性能提升。我很想写自己的解码器,但我想了解这里发生了什么。任何洞察力都将不胜感激。
发布于 2012-06-24 02:31:21
情况就是这样..只找一个要便宜得多。
https://stackoverflow.com/questions/11160920
复制相似问题