public synchronized void start() {
    if (runningTaskCount < 0) {
      throw new IllegalStateException("runningTaskCount < 0");
    }

    if (runningTaskCount == 0) {
      executor.start(subtask.getTaskID());
    }

    runningTaskCount++;
    LOGGER.info(
        "Start subtask {}. runningTaskCount: {}, registeredTaskCount: {}",
        subtask,
        runningTaskCount,
        registeredTaskCount);
  }
Deregister the {@link PipeConnectorSubtask}. If the {@link PipeConnectorSubtask} is the last
one, close the {@link PipeConnectorSubtask}.

<p>Note that this method should be called after the {@link PipeConnectorSubtask} is stopped.
Otherwise, the {@link PipeConnectorSubtaskLifeCycle#runningTaskCount} might be inconsistent
with the {@link PipeConnectorSubtaskLifeCycle#registeredTaskCount} because of parallel
connector scheduling.

@param pipeNameToDeregister pipe name
@param regionId region id
@return {@code true} if the {@link PipeConnectorSubtask} is out of life cycle, indicating that
    the {@link PipeConnectorSubtask} should never be used again
@throws IllegalStateException if {@link PipeConnectorSubtaskLifeCycle#registeredTaskCount} <= 0
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/agent/task/subtask/connector/PipeConnectorSubtaskLifeCycle.java