In 0.96, we have the RPC handlers listed as tasks and show them in the web UI as well:
After pluggable RPC scheduler, the way the tasks work for the handlers got changed. We no longer list idle RPC handlers in the tasks, but we register them dynamically to TaskMonitor through CallRunner. However, the IPC readers are still registered the old way (meaning that idle readers are listed as tasks, but not idle handlers).
From the javadoc of MonitoredRPCHandlerImpl, it seems that we are NOT optimizing the allocation for the MonitoredTask anymore, but instead allocate one for every RPC call breaking the pattern (See CallRunner.getStatus()).
There is also one more side affect that, since the CallRunner is a per-RPC object and created in the RPC listener thread, the created task ends up having a name "listener" although the actual processing happens in a handler thread. This is obviously very confusing during debugging.