10 потоков в одной программе или 1 потоковая программа выполнялась 10 раз (C ++)? - PullRequest
1 голос
/ 17 января 2020

Мне интересно, есть ли разница в производительности при запуске одной программы (exe) с 10 различными потоками или при запуске программы с одним потоком 10 раз параллельно (начиная с файла .bat), предполагая, что работа выполнена такое же и только число потоков, порожденных изменением программы?

Я разрабатываю программу связи клиент / сервер и хочу проверить ее на пропускную способность. В настоящее время я изучаю параллельное программирование и многопоточность, так как не знал, как Windows справится с описанным выше сценарием. Будет ли расписание планировщика работать одинаково для обоих сценариев ios? Будет ли разница в производительности?

Машина, на которой работает программа, имеет 4 потока.

1 Ответ

4 голосов
/ 17 января 2020

Потоки имеют немного меньший вес, чем процессы, поскольку существует много вещей, которые процесс получает в свою собственную копию. Особенно, когда вы сравниваете время, необходимое для запуска нового потока, с началом нового процесса (с нуля, fork там, где это возможно, также позволяет избежать больших затрат). Хотя в любом случае вы, как правило, можете добиться еще большей производительности, используя рабочий пул, где это возможно, вместо того, чтобы запускать и останавливать fre sh процессов / потоков.

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

Также могут быть API, которые более ориентированы на один процесс. Например, в Windows есть порты завершения ввода-вывода, которые в основном работают на идее выполнения множества операций ввода-вывода для различных файлов, сокетов и т. Д. c. с несколькими потоками (но обычно гораздо меньшим, чем количество файлов / сокетов), обрабатывающими результаты по мере их поступления через GetQueuedCompletionStatus l oop.

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