Skip to content

Block in NonBlockingInputStream #2297

@vad0

Description

@vad0

Image

Image

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions