Почему два процесса имеют преимущество перед двумя потоками?

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

Процесс обновления не имеет зависимостей вне БД, поэтому мое приложение можно настроить с переменным количеством потоков. Поскольку я хочу, чтобы процесс был устойчивым в случае сбоя, я хочу обрабатывать как можно больше сообщений, но не больше (поэтому, если система выйдет из строя, я могу продолжить с того места, где я оставил).

У меня приложение работает правильно, но я заметил, что если я увеличиваю количество потоков, которые использую для обработки сообщений, мое среднее количество сообщений будет на одном уровне (я использую счетчики производительности для измерения этого), и я заставить систему использовать, скажем, 50% доступного времени ЦП (у меня Core i7 820QM с 4 физическими ядрами и 8 логическими ядрами), но если я вместо того, чтобы поднимать потоки, запускаю такое же количество процессов, я получаю использовать 100% процессорного времени и обрабатывать гораздо большее количество средних событий.

Может ли это быть проблемой конфликта блокировок? Что-то связано с тем, как Windows 7 обрабатывает гиперпоточные процессоры? Я хочу понять природу проблемы, и я буду благодарен за любые указатели.

Примечание: я использую MSMQ, Rx и Entity Framework в этом проекте.

8
задан Pablo Montilla 27 April 2011 в 21:12
поделиться