Процесс Windows C ++ против потока - PullRequest
3 голосов
/ 15 апреля 2011

В Windows C ++, createThread() вызывает замедление работы некоторых потоков, если один поток выполняет очень интенсивную загрузку процессора. createProcess() облегчит это? Если это так, означает ли createProcess(), что код должен находиться во втором исполняемом файле, или все это может происходить внутри одного и того же исполняемого файла?

Ответы [ 5 ]

9 голосов
/ 15 апреля 2011

Основное различие между процессом и потоком состоит в том, что каждый процесс имеет свое собственное пространство памяти, в то время как потоки разделяют пространство памяти процесса, в котором они работают.

Если поток действительно связан с процессором, он будет замедлять другой поток, только если они оба выполняются на одном и том же ядре процессора.createProcess не уменьшит это, поскольку процесс все равно будет иметь ту же проблему.

Кроме того, на какой машине вы работаете?У него более одного ядра?

1 голос
/ 30 декабря 2011

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

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

1 голос
/ 15 апреля 2011

Маловероятно - процесс намного «тяжелее» потока, поэтому, скорее всего, он будет еще медленнее.Я не уверен, что вы спрашиваете о втором исполняемом файле, но вы можете использовать createProcess на том же .exe.

http://msdn.microsoft.com/en-us/library/ms682425(v=vs.85).aspx

Звучит так, как будто вы гналисьпроблемы с производительностью, поэтому, возможно, было бы полезно попробовать профилировщик, ориентированный на многопоточность: http://software.intel.com/en-us/articles/using-intel-thread-profiler-for-win32-threads-philosophy-and-theory/

0 голосов
/ 15 апреля 2011

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

(кэш L2 физически сопоставлен, то есть использует аппаратные адреса. Конечно, они не меняются.)

0 голосов
/ 15 апреля 2011

Создание процесса и создание потока вызывают дополнительное выполнение в среде с ограниченными ресурсами. Это означает, что независимо от того, как вы выполняете параллельную обработку в какой-то момент времени, ваши другие линии исполнения будут влиять на ток. Именно по этой причине для очень больших проблем, которые подходят для парализованной распределенной системы, используются. Есть плюсы и минусы, хотя темы и процессы.


Потоки

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


Процессы

Каждый процесс имеет свое собственное адресное пространство и как таковой защищает себя от сбоя другим процессом, но не имеет возможности легко общаться. Любое общение обязательно будет включать в себя некоторый тип IPC (Pipes, TCP, ...).

Код не обязательно должен быть во втором исполняемом файле, нужно запустить только два экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...