Ваши потоки работают в порядке создания в основном из-за подробностей реализации в Perl и операционной системе (главным образом потому, что их индивидуальное время выполнения ниже самого короткого интервала времени выполнения операционной системы). Чтобы чередовать потоки, вы можете использовать sleep вместо yield (или заставить потоки выполнять какую-то реальную работу).
Имейте в виду, что yield
в потоках Perl - это всего лишь предложение, которое отличается от того, как yield работает в некоторых других языках. Поскольку потоки Perl являются параллельными и в основном управляются планировщиком операционной системы, если вы не используете какой-либо мьютекс для блокировки выполнения, на самом деле невозможно предсказать их порядок выполнения.