@Override
    AbstractEventLoopEntry acquire() {
        lock();
        try {
            if (acquisitionStartIndex == -1) {
                init(scheduler().acquisitionStartIndex(maxNumEventLoops));
            }
            AbstractEventLoopEntry e = entries[0];
            if (e.activeRequests() > 0) {
                // All event loops are handling connections; try to add an unused event loop.
                if (addUnusedEventLoop()) {
                    e = entries[0];
                    assert e.activeRequests() == 0;
                }
            }

            assert e.index() == 0;
            e.incrementActiveRequests();
            allActiveRequests++;
            bubbleDown();
            return e;
        } finally {
            unlock();
        }
    }
A binary heap of Entry. Ordered by:
<ul>
  <li>{@link AbstractEventLoopEntry#activeRequests()} (lower is better)</li>
  <li>{@link AbstractEventLoopEntry#id()} (lower is better)</li>
</ul>
core/src/main/java/com/linecorp/armeria/client/HeapBasedEventLoopState.java