作者gasbomb (虚空雷神兽)
看板java
标题[问题] AsynchronousSocketChannel 异常缓慢
时间Wed Dec 11 16:47:39 2019
最近在练习用实作 telnet 聊天室
ServerSocket 因为有太吃资源的问题所以改用 AsynchronousServerSocketChannel
但是用 aio 处理封包太长, 一次收到复数请求时
出现了奇怪的延迟状况
这是正常的版本
https://pastebin.com/Q8Mwf0XU
接到 client 的输入之後直接 write 回去
localhost 跑起来完全感觉不到延迟
但是考虑到要是 client 一次输入了超过 ByteBuffer.allowcate() 的大小字会断掉
所以用了 ByteArrayOutputStream 来接资料
没遇到 \n 就一直接下去, 遇到 \n 就断开
这是第二版
https://pastebin.com/dsT3sQAV
但是诡异的事情发生了, 第二版的程式运作非常良好, 一切行为都在我的预想之中
但是反应时间变得超级久, client 端 enter 按下去大概要等 300ms 左右才会收到回应
可是我在方法头尾加 System.currentTimeMillis() 去算执行时间
两个版本平均都在 4ms 以内执行完毕
请问这可能是什麽部分出问题了?
--
╔═◢ ◣═╦╦═════╦═════╗
║
◤◤◤ ◥ ╠╣
飞鸟ももこ╠═╗ ║
║ ▇ ▇ ║╚═════╝ ╚═╦═╣
║ ▌ ● ● ▌ ║╔══════╗╔═╩═╣
║
◤ ◥
︺█◤
◥╠╣
Momoko Asuka╠╝ ║
╚◣◢ ▄▂▄ ◣◢╩╩══════╩════╝
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 211.72.253.42 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1576054063.A.62C.html
※ 编辑: gasbomb (211.72.253.42 台湾), 12/11/2019 16:52:04
1F:推 tw11509: 我本机跑了一下第二版,没遇到你说的问题,client感觉不 12/12 11:14
2F:→ tw11509: 出延迟 12/12 11:14
3F:推 tw11509: 你可能进debug mode才能厘清原因 12/12 11:24