ClickHouse / ClickHouse/clickhouse-java

Block in NonBlockingInputStream

Ouverte
#2,297 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
bug client-v1 enhancement
Langage dominant
Java
Étoiles
1.6k
Forks
636
Merge moyen
2 j 23 h
PR mergées (30 j)
29

Description

![Image](https://github.com/user-attachments/assets/4f8a9c5d-5ab7-4b99-84b4-0d02281d623b)

![Image](https://github.com/user-attachments/assets/dd02be80-b7ec-4789-b138-bb695248f8ba)

https://github.com/ClickHouse/clickhouse-java/blob/5758ec51f944dc1daaac4a85084346ee5f8e93bb/clickhouse-data/src/main/java/com/clickhouse/data/stream/NonBlockingInputStream.java

NonBlockingInputStream has a busy loop in it, which consumes 100% CPU while it waits for data from server. Not only does it block the NonBlockingInputStream, but also it does it in a resource intensive way.

### Describe the solution you'd like
Either add Thread.sleep(1) there or a more configurable wait strategy.

### Describe the alternatives you've considered
One can also change queue implementation from AdaptiveQueue to some other queue which supports blocking waiting. But it contradicts the expected non blocking behavior of this class anyway.

### Additional context
I am attaching a profile of my application collected by async profiler. One can see that about 86% of cpu time is spent in this place.

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par lire clickhouse-data/src/main/java/com/clickhouse/data/stream/NonBlockingInputStream.java, en vous concentrant sur la boucle active qui attend les données du serveur et sur l’interaction avec AdaptiveQueue. Comparez une courte temporisation à une stratégie d’attente configurable, tout en préservant le comportement non bloquant de la classe. La tâche sera considérée comme terminée lorsque le stream ne consommera plus excessivement de CPU en attendant les données.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
java
Domaine
performance
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
55/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.