2016-12-08 1 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()를 사용하므로 어디서 잘못되었는지 이해하지 못합니까?

CPU가 너무 바빠서 버퍼를 플러시하기 전에 너무 많은 메시지를 쓸 때 이런 일이 발생할 수 있습니까?

누군가 나를 도울 수 있기를 바랍니다. 감사합니다.

답변

4

writeAndFlush(Object msg) javadoc : Shortcut for call write(Object) and flush().에서 언급 한 것처럼 구문식 설탕 일뿐입니다.

이것이 따라서이 (가능) 원자 동작 하지이다 문맥하므로 쓰기 즉시 플러시되지 않고,이 방법의 실행의 중앙에 다수의 스레드를 전환하고, 따라서 채널의 버퍼 취득 수단 fulled.

+0

감사합니다. –

관련 문제