Hoppers do not properly iterate through chest-minecarts or hopper-minecarts when trying to transfer items into or out of them. Instead, they select a random minecart each tick. Due to this, item transfer takes longer than expected.
Place a hopper with a rail on top. Place multiple chest minecarts on the rail, a dozen or so. Place items in a single minecart. Notice how they flow much slower than the typical 2.5 items/s.
The following is from version 1.12 MCP 940, in net.minecraft.tileEntity.TileEntityHopper, in the method getInventoryAtPosition:
The hopper randomly selects one of the inventories from the list, causing the bug. A fix would be to select the first non-full inventory for pushing items, and the first non-empty inventory for sucking items.