Я слышал, что микширование и потоки в программе может быть очень проблематичным, что часто приводит к таинственным поведением, особенно при работе с общими ресурсами, такими как блокировки, каналы, файловые дескрипторы. Но я никогда не понимаю, в чем именно опасности, и когда это может произойти. Было бы здорово, если бы кто-то, кто имел опыт в этой области, мог более подробно объяснить, что такое подводные камни и что нужно заботиться при программировании в такой среде.
Например, если я хочу написать сервер, который собирает данные из разных ресурсов, одно из решений, которое, как я думал, состоит в том, что сервер порождает набор потоков, каждый поп, чтобы вызвать другую программу для выполнения фактической работы, откройте каналы, чтобы вернуть данные от ребенка. Каждый из этих потоков отвечает за собственную работу, без обмена данными в ч/б их, и когда данные собираются, основной поток имеет очередь, и эти рабочие потоки просто помещают результат в очередь. Что может пойти не так с этим решением?
Пожалуйста, не сузите свой ответ, просто "отвечая" на мой примерный сценарий. Любые предложения, альтернативные решения или опыт, не связанные с примером, но полезные для обеспечения чистого дизайна, были бы замечательными! Спасибо!