Информация об изменениях

Сообщение Re[2]: Потоки, net, потеря производительности от 11.02.2015 9:29

Изменено 11.02.2015 9:30 inevity

Здравствуйте, fmiracle, Вы писали:

F>Потери производительности же вроед нет? Есть ненарастание производительности. Это чуть иное.


До 5 потоков есть падение нарастания, после 5 потоков (6 и более) идет даже падение! (суммарное количество обработанных данных за единицу времени становится меньше)


F>Тут вопрос в том, что происходит в DoWork. Это процессорно-ориентирвоанная операция? Если. например, это операция ввода-ввода (общение с диском или с сетью), то вполне может быть так, что на 10 потоках достигается максимальо допустимая загрузка этого самого диска, сетевого адаптера или внешней БД и потоки начинают постоянно ждать его освобождения. В таком случае, дальнейшее увеличение количества потоков выигрыша не дает. И загрузка процессора не растет.


В DoWork Идет генерация чисел на основе экземпляра класса random (отдельный экземпляр на экземпляр рабочего класса), числа записываются в соответствующие объекты(создаются) разных логических типов.
Т.е. задача DoWork — нагенерировать данные(на данные накладываются различные фильтры).
Как пример, если я запускаю 20 программ(а не 20 потоков), то сервер грузится ожидаемо (75-80% примерно)

F>Расходы памяти на сам поток достаточно небольшие, и малозаметны на фоне общих расходов памяти приложения. А сколько там метод, работающий в потоке будет потреблять оперативки — это опять же зависит от коад метода.


Метод запускает методы передаваемого экземпляра класса, и в этих методах запускается достаточно много других методов создаваемых экземпляров других классов.
Тут у меня возник вопрос — все эти методы, они как бы хранятся в памяти в виде копий для каждого экземпляра класса, или копия для методов одна?
Т.е. если копия одна — может они конкурируют как то...
Здравствуйте, fmiracle, Вы писали:

F>Потери производительности же вроед нет? Есть ненарастание производительности. Это чуть иное.


До 5 потоков есть падение нарастания, после 5 потоков (6 и более) идет даже падение общей производительности! (суммарное количество обработанных данных за единицу времени становится меньше)


F>Тут вопрос в том, что происходит в DoWork. Это процессорно-ориентирвоанная операция? Если. например, это операция ввода-ввода (общение с диском или с сетью), то вполне может быть так, что на 10 потоках достигается максимальо допустимая загрузка этого самого диска, сетевого адаптера или внешней БД и потоки начинают постоянно ждать его освобождения. В таком случае, дальнейшее увеличение количества потоков выигрыша не дает. И загрузка процессора не растет.


В DoWork Идет генерация чисел на основе экземпляра класса random (отдельный экземпляр на экземпляр рабочего класса), числа записываются в соответствующие объекты(создаются) разных логических типов.
Т.е. задача DoWork — нагенерировать данные(на данные накладываются различные фильтры).
Как пример, если я запускаю 20 программ(а не 20 потоков), то сервер грузится ожидаемо (75-80% примерно)

F>Расходы памяти на сам поток достаточно небольшие, и малозаметны на фоне общих расходов памяти приложения. А сколько там метод, работающий в потоке будет потреблять оперативки — это опять же зависит от коад метода.


Метод запускает методы передаваемого экземпляра класса, и в этих методах запускается достаточно много других методов создаваемых экземпляров других классов.
Тут у меня возник вопрос — все эти методы, они как бы хранятся в памяти в виде копий для каждого экземпляра класса, или копия для методов одна?
Т.е. если копия одна — может они конкурируют как то...