Tengo una aplicación de Netty, donde quiero tener más de un subproceso para escribir en un canal. Me preguntaba si Channel.write es seguro para subprocesos¿Netty Channel.write es seguro?
Respuesta
Es seguro para subprocesos, por lo que no tiene que preocuparse.
No, es inseguro, porque Channel.write
llama a ChannelOutboundBuffer.addMessage
en HeadContext de su pipeline, y ChannelOutboundBuffer.addMessage
es definitivamente inseguro. Echar un vistazo a este código:
public void addMessage(Object msg, int size, ChannelPromise promise) {
Entry entry = Entry.newInstance(msg, size, total(msg), promise);
if (tailEntry == null) {
flushedEntry = null;
tailEntry = entry;
} else {
Entry tail = tailEntry;
tail.next = entry;
tailEntry = entry;
}
if (unflushedEntry == null) {
unflushedEntry = entry;
}
// increment pending bytes after adding message to the unflushed arrays.
// See https://github.com/netty/netty/issues/1619
incrementPendingOutboundBytes(size, false);
}
, por lo que debe tener como máximo un hilo que llame a Channel.write en cualquier momento. hay algo mal con el formato del código, puede encontrarlo en http://netty.io/4.0/xref/index.html – yuguoliang
No puedo confirmar su reclamo. Veo que 'AbstractChannel.write' llama a' Pipeline.write', que eventualmente llama 'AbstractUnsafe.write', después de que adquirió el bucle de evento para ese canal. Dentro de este método hay una afirmación de que el hilo está dentro del bucle de evento, por lo que solo se puede llamar por 1 hilo a la vez – Ferrybig
Como se puede ver en el código, el método ChannelOutboundBuffer.addMessage()
sí mismo no es hilo de seguridad. Sin embargo, Writing channel es "thread safe" porque netty ejecuta la tarea/método de escritura en la única cadena de E/S.
- 1. HTTP muy concurrente con Netty y NIO
- 2. Channel.isWritable notofication en Netty
- 3. Netty SSL Handler Unit Tests
- 4. Cliente HTTP asíncrono con Netty
- 5. Usando SPDY con Netty
- 6. Java Interop - Netty + Clojure
- 7. Netty SslHandler headache
- 8. ¿Cuán seguro es mi regreso seguro?
- 9. Netty Channel detección cerrada
- 10. Netty vs Apache MINA
- 11. Netty y ByteOrder
- 12. ¿Es seguro .NET System.Net.CookieContainer?
- 13. ¿Es seguro usar os.environ.setdefault?
- 14. Revisiting Thread.Abort() - ¿es seguro?
- 15. ¿Es seguro Java?
- 16. Java: ¿ServerSocket.accept es seguro?
- 17. ¿Es seguro MSMQ thread?
- 18. es NetNamedPipeBinding seguro?
- 19. cuán seguro es tomcat
- 20. ¿Es seguro chmod 757?
- 21. ¿Java MulticastSocket es seguro?
- 22. ¿Es seguro este escenario?
- 23. java.text.SimpleDateFormat no es seguro
- 24. ¿Es seguro usar window.screen?
- 25. TempData: ¿Es seguro?
- 26. ¿Es seguro este subproceso?
- 27. ¿Es seguro PHP exec?
- 28. FormsAuthentication: ¿Es seguro?
- 29. ¿Es const_cast seguro?
- 30. ¿Math.random() es criptográficamente seguro?
http://stackoverflow.com/a/10702210/828625 –
No lo sé, podría estar equivocado. Pero este http://lists.jboss.org/pipermail/netty-users/2008-November/000045.html parece estar en conflicto con las observaciones en el hilo que citó. –
Una vez más, lo que ha vinculado dice lo mismo y responde su pregunta. Channel.write es seguro para subprocesos. –