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