[問題] AsynchronousSocketChannel 異常緩慢
最近在練習用實作 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://www.ptt.cc/bbs/java/M.1576054063.A.62C.html
※ 編輯: gasbomb (211.72.253.42 臺灣), 12/11/2019 16:52:04
推
12/12 11:14,
5年前
, 1F
12/12 11:14, 1F
→
12/12 11:14,
5年前
, 2F
12/12 11:14, 2F
推
12/12 11:24,
5年前
, 3F
12/12 11:24, 3F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章