Это само собой. Я только о том, что таки есть вырожденные случаи, где оно может иметь смысл.
Да, бывают. Но редко.
Так и с выхода Дрепперовской статьи про память тоже столько же прошло, а многие ли понимают, как с этой самой памятью работать в эпоху повсеместной нумы?
Вот, кстати, не умею. Т.е. общие принципы - либо число потоков меньше числа ядер в одном ЦП, либо очень жёстко лимитировать коммуникации между потоками (там где-то 1E3 тактов на синхронизацию). Но и всё.
Нельзя же забывать, что программа сейчас работает на 4-х ядерке i5, где нумы почти нет, а завтра - на 4-х процессорном серваке. И никто не может обещать, что вот эти два потока не работают на одном ядре, воруя друг у друга ресурсы. Т.е. окружение программы может довольно сильно в этом смысле различаться. А значит, программа, как правило, не может быть очень сильно оптимизирована под конкретную систему.
Отсюда мораль - применяем базовые принципы, а о 2-х разах и не переживаем, параллелим только если потоки могут выполнять независимо, между синхронизациями, хотя бы 1E5 тактов, т.е. 1 миллисекунду. Потоки, причём, не зелёные, а capabilities.