Сеть Java, звонки для записи в среднем занимают в 4 раза больше времени, чем звонки для чтения, это нормально? - PullRequest
2 голосов
/ 14 декабря 2010

Если быть более точным, я написал сервер с Java NIO, и он работает тихо и хорошо, после некоторого тестирования я обнаружил, что по какой-то причине в среднем вызов метода записи SocketChannels занимает 1 мс, метод чтения с другой стороны, занимает в среднем 0,22 мс.

Сначала я подумал, что установка значений буфера отправки / получения в Socket может немного помочь, но после обдумывания все сообщения очень короткие (несколько байтов), и я отправляю сообщение примерно каждые 2 секунды. на одном подключении. Размер буфера отправки и приема превышает 1024 байта, так что это не может быть проблемой, у меня есть несколько тысяч клиентов, подключенных одновременно.

Теперь у меня нет идей по этому поводу, это нормально, и если да, то почему?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2011

@ Nuoji, я использую nonblocikng-io, и да, я использую Селектор, когда я пишу на канал, я делаю следующее:

Поскольку то, что я написал во втором абзаце в моем посте,правда, я предполагаю, что канал в большинстве случаев готов к записи, поэтому сначала я не устанавливаю интерес, установленный для ключа записи, а скорее пытаюсь записать канал напрямую.Однако, в случае, если я не могу записать все в канал (или вообще что-либо в этом отношении), я устанавливаю интерес, установленный для ключа записи (таким образом, в следующий раз, когда я пытаюсь записать в канал, он готов кзаписывать).Хотя в моем тестировании, где я получил результаты, упомянутые в оригинальном посте, это происходит очень редко.

И да, я могу дать вам примеры кода, хотя я действительно не хотел никого беспокоить этим.Какие части, в частности, вы хотели бы видеть, поток селектора или поток записи?

0 голосов
/ 15 декабря 2010

Я бы начал с использования Wireshark для устранения переменных.

...