Да, это ожидаемое поведение.
TBB - это библиотека, разработанная для распараллеливания кода для выполнения. Он не предназначен для асинхронных задач - официальная документация гласит, что для таких задач вам следует использовать другую библиотеку, например, pthreads (или, в вашем случае, boost :: thread).
Для максимальной производительности не имеет смысла иметь больше потоков, чем у вас ядер, так как в этом есть некоторые существенные накладные расходы (не только переключение контекста, но и такие вещи, как очистка кэша).
EDIT:
Вы можете прочитать об этом в Tutorial . В частности, в разделе 1.2 «Преимущества» говорится
Intel® Threading Building Blocks нацеливает многопоточность на производительность.
Большинство потоковых пакетов общего назначения поддерживают множество различных типов
потоков, таких как потоки для асинхронных событий в графическом пользовательском
интерфейсы. В результате пакеты общего назначения, как правило,
инструменты низкого уровня, которые обеспечивают основу, а не решение. Вместо,
Intel® Threading Building Blocks фокусируется на конкретной цели
распараллеливание вычислительно интенсивной работы, поставка
простые решения более высокого уровня.
и
Intel® Threading Building Blocks совместим с другими потоками
пакеты. Поскольку библиотека не предназначена для решения всех проблем с потоками,
он может легко сосуществовать с другими пакетами потоков.