Некоторые способы, которыми я могу думать о том, что f
может работать «как если бы» в новом потоке, фактически не делая этого, были бы, если бы f
фактически не использовал никакого состояния, совместно используемого с другими потоками; затем реализация может запустить его как отдельный процесс (так как ему не нужно пространство общей памяти), она также может просто запустить его в основном потоке как просто еще один вызов функции (если она может доказать, что f
не блокирует или имеют наблюдаемые побочные эффекты, которые будут отличаться при запуске таким образом). Он также может быть запланирован для запуска в существующем (но бездействующем) потоке (пуле потоков).
И если вы хотите быть глупым, я думаю, вы могли бы также подумать о том, чтобы вообще не запускать f
, поскольку нет никаких гарантий относительно того, когда новые потоки будут запланированы для запуска операционная система, поэтому злая реализация может просто сказать, что ОС никогда не планирует какой-либо поток, кроме основного потока, поэтому полное отсутствие f
равносильно планированию его в новом потоке. Конечно, это глупо / глупо, и никакая вменяемая реализация никогда бы этого не сделала - но в теории 1011 * язык допускает такую вырожденную реализацию (я думаю).