grpc / grpc/grpc-java

Excess contention in ExecutorService

Abierto
#2,118 8 comentarios 0 reacciones 0 asignados Ver en GitHub
performance
Lenguaje dominante
Java
Estrellas
12.1k
Forks
4k
Merge medio
2 d 17 h
PR fusionados (30 d)
37

Descripción

When profiling a client with 200K active RPCs, there is a point of contention on the Executor. Each RPC gets its own SerializingExecutor, which executes work on an underlying executor. Currently, that executor is ThreadPoolExecutor in almost all cases, which itself has a BlockingQueue. That queue is heavily contended showing up at _minutes_ of wasted time:

```
141.17mins 79.41% 79.41% 141.22mins 79.44% java.util.concurrent.LinkedBlockingQueue.offer LinkedBlockingQueue.java
36.51mins 20.54% 99.95% 36.52mins 20.54% java.util.concurrent.LinkedBlockingQueue.take LinkedBlockingQueue.java
```

An idea to fix this is to have some sort of striping executor in order to prevent this contention from happening.

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Comienza examinando la ruta de SerializingExecutor y ThreadPoolExecutor descrita en el issue, incluida la contención de BlockingQueue mostrada por el perfil. El alcance consiste en definir y evaluar un enfoque de striping-executor para la carga de trabajo de 200K-RPC; el issue no especifica archivos, pruebas ni un criterio de finalización más concreto.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
java
Área
backend-api-design, performance
Tipo de issue
Refactorización
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.