Проблема с многопоточностью заключается в том, что для безопасной передачи данных непосредственно между ними вам потребуется некоторая форма синхронизации между ними.Делайте это достаточно часто, и вы исключите любые преимущества использования нескольких потоков.
Моя собственная практика - не использовать потоки, если в этом нет абсолютной необходимости.Часто я использую больше потоков, если я взаимодействую с какими-то аппаратными средствами, такими как последовательные или сетевые устройства, поскольку они могут резко замедлить отклик системы.
Я склонен придерживаться правила, согласно которому поток должен бытьвозможность работать самостоятельно с небольшим (если есть) взаимодействием с любым другим кодом.Если часть кода сильно зависит от другой, то их не следует размещать в отдельных потоках.
Вы должны спроектировать систему, которая сначала работает (во что бы то ни стало поместите код подсистемы в отдельные библиотеки), а затем, если производительностьявляется проблемой, чтобы посмотреть, есть ли какие-либо преимущества от многопоточности.Делая это таким образом, вы избегаете хлопот отладочных потоков до тех пор, пока это не станет абсолютно необходимым.
Как говорится, Keep It Simple.