2016-12-08 5 views
1

вот мой пример кода, как я сказал в заголовке, когда уровень совпадения высокий, isWritable() возвращает много false.netty channel.iswritable() возвращает false, когда уровень совпадения высокий

if (channel.isWritable()) { 
     ChannelFuture future = channel.writeAndFlush(data); 
     if (future.cause() != null) { 
      data.release(); 
      throw new IOException(future.cause().toString()); 
     } 
     future.addListener(writeCallback); 
    } 

И я хочу, кто-то может объяснить, почему это происходит, причина, насколько я знаю, это случилось, когда я писал, но не покраснело так, что размер буфера добавить больше, чем размер WRITE_BUFFER_HIGH_WATER_MARK. Но, как вы можете видеть, я использую writeAndFlush(), поэтому я не понимаю, где это неправильно?

Возможно ли это, когда процессор слишком занят, что он пишет слишком много сообщений, прежде чем он очистит буфер?

Надеюсь, кто-то может мне помочь, спасибо!

ответ

4

Как указано в writeAndFlush(Object msg) javadoc: Shortcut for call write(Object) and flush()., а именно, это просто синтаксический сахар.

Это означает, что это неатомной операция, поэтому (возможно) является переключение контекста между несколькими потоками в середине этого выполнения метода, так что ваши записи не покраснели немедленно, и, следовательно, буфер канала получает валяется.

+0

Спасибо, это имеет смысл! –

 Смежные вопросы

  • Нет связанных вопросов^_^