Безопасно ли создавать потоки после разветвления?

Я узнал, что обычно следует придерживаться либо разветвления, либо потоковой передачи, чтобы избежать очень странных и чрезвычайно сложных для отладки проблем, поэтому до сих пор я всегда делал именно это. Моя проблема в том, что когда я использую только разветвление, создание множества недолговечных процессов для распределения фрагментов работы, которые становятся более дорогостоящими с увеличением количества ядер ЦП, которые я хочу кормить, до тех пор, пока в какой-то момент производительность просто больше не масштабируется в разумных пределах. В то же время, используя только потоки, я должен быть очень осторожен с тем, какие библиотеки я использую, и, как правило, быть чрезвычайно защищенным в отношении безопасности потоков, это отнимает много драгоценного времени на разработку и заставляет отказаться от некоторых любимых библиотек. Итак, даже несмотря на то, что меня предупреждали, мысль о смешивании разветвления и многопоточности действительно привлекает меня на нескольких уровнях.

Теперь, из того, что я читал до сих пор, кажется, что проблемы всегда возникают, когда уже созданы потоки, когда происходит форк.

Учитывая, что я разработал систему, которая запускалась, демонизировалась, разветвлял свои основные ярусы и никогда больше не делал разветвлений, после того как я был бы в полной безопасности и надежности. Если некоторые из этих предварительно разветвленных уровней теперь начнут использовать потоки для распределения своей рабочей нагрузки по многим ядрам ЦП, чтобы различные дочерние процессы никогда не знали о рабов других детей, это все еще безопасно ? Я могу заверить, что каждый уровень сам по себе является потокобезопасным и что уровни, не поддерживающие потоки, никогда не будут запускать собственный поток.

Хотя я считаю вполне безопасным в отношении этого подхода, Я был бы признателен за несколько профессиональных мнений по этому поводу, указывающих на всевозможные возможные предостережения, интересные точки зрения, ссылки на дополнительные материалы для чтения и т. Д. Я лично использую Perl для Debian, RedHat, SuSe и OS X, но тема должна быть достаточно общей, чтобы быть допустимой для любого языка на любой Un * x / BSD-подобной платформе, которая удаленно ведет себя POSIX, возможно даже Interix.

9
задан Olfan 15 September 2010 в 23:26
поделиться