作者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/m.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