[問題] AsynchronousSocketChannel 異常緩慢

看板java作者 (虛空雷神獸)時間4年前 (2019/12/11 16:47), 4年前編輯推噓2(201)
留言3則, 1人參與, 4年前最新討論串1/2 (看更多)
最近在練習用實作 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, 4年前 , 1F
我本機跑了一下第二版,沒遇到你說的問題,client感覺不
12/12 11:14, 1F

12/12 11:14, 4年前 , 2F
出延遲
12/12 11:14, 2F

12/12 11:24, 4年前 , 3F
你可能進debug mode才能釐清原因
12/12 11:24, 3F
文章代碼(AID): #1TyAqlOi (java)
文章代碼(AID): #1TyAqlOi (java)