Performing any long running task or CPU intensive work on transport_worker threads is problematic. This is typically very bad for cluster stability.

This issue has been filed to examine the usage of transport_worked threads by ESQL, with the intention of "offloading" as much as possible, including deserialising large(ish) amounts of data.
x-pack/plugin/esql/compute/src/main/java/org/elasticsearch/compute/operator/exchange/ExchangeService.java
node,
                EXCHANGE_ACTION_NAME,
                new ExchangeRequest(exchangeId, allSourcesFinished),
                parentTask,
                TransportRequestOptions.EMPTY,
                new ActionListenerResponseHandler<>(listener, ExchangeResponse::new, TransportResponseHandler.TRANSPORT_WORKER)
            );
        }
    }
    
    public boolean isEmpty() {
        return sources.isEmpty() && sinks.isEmpty();
    }
    @Override
    protected void doStart() {
    }
    @Override
    protected void doStop() {
        inactiveSinksReaper.close();
    }
    @Override
    protected void doClose() {
        doStop();
    }
    @Override
    public String toString() {
        return "ExchangeService{" + "sinks=" + sinks.keySet() + ", sources=" + sources.keySet() + '}';
    }
}