2009-12-10 7 views
1

Родительский процесс предваряет ряд процессов, и каждый предварительно подготовленный процесс создает количество потоков (пулы потоков). Все потоки в одном и том же адресном пространстве могут совместно использовать данные и могут использовать различные методы синхронизации для критических разделов. Я хочу знать, как синхронизировать потоки из разных адресных пространств. Моя первоначальная мысль (я могу ошибаться) заключается в использовании общей памяти и использовании семафора для синхронизации. Этот дизайн увеличит использование двух семафоров/мьютексов.Многопроцессорный и многопоточный дизайн

Есть ли лучший дизайн для решения проблемы ?. Я знаю, что apache 2.0 использует гибридный mulitprocess и многопоточный серверный дизайн. Будет полезно, если у меня есть идея скелетного кода для гибридного подхода. Я больше сосредоточен на масштабируемости и надежности.

ответ

2

Я обычно придерживаюсь той или иной вилки и использую межпроцессорный IPC (разделяемая память, трубы, сокеты и т. Д.) Или потоки, а также обмениваются данными в структурах памяти. Если вы не купите что-нибудь, то я рекомендую выбрать его и запустить с ним.

2

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

flock() (и более мелкозернистый вариант в fcntl()), чтобы решить эту проблему.

Если это так, потому что они работают в одной таблице базы данных, просто используйте транзакции вашей СУБД.

Смежные вопросы