Run reader and keep-alive workers on dedicated threads provided by SingleThreadExecutor. The thread handlers are stored in EndpointState, the workers are automatically terminated when EndpointState is destroyed. PiperOrigin-RevId: 380543888