![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Вообщем у меня есть программа которая выгружает из БД файлы. Работа проходит быстро, но хотелось бы еще быстрее. Принцип работы таков: программа запускает поток в котором цикл, в каждой итерации цикла происходит выгрузка файла. Довольно такой последовательный механизм. Хотелось бы сделать чтоб в каждой итерации цикла создавать свой поток на выгрузку одного файла. Есть два вопроса, первый чисто теоретический. Если в цикле 50 000 итераций и он создаст 50 000 потоков, то программа будет работать быстрее, не загнется?
Как мне получить оповещение что поток прекратил работу? -------------------- ![]() |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Я правильно понял проблему? Есть программа, работающая хорошо и быстро, так вот вопрос в том, а не вхренячить ли в неё полста тысяч потоков и посмотреть не загнётся ли. А потом ещё если не загнётся, то чтобы каждый поток(из 50000) выдавал оповещение, что дескать, работа выполнена.
А оповестить легко, месседжбоксы запустить из каждого, и потом вручную закрывать. А если серьёзно, то мне как-то странно, что при таких условиях, вопрос в том, будет ли прога быстрее работать, а не медленнее. Я, конечно не пробовал(как-то не додумался), но мне почему-то кажется, что идея плохая. Многопоточность ведь это только видимость параллельного выполнения нескольких действий одновременно. Просто при такой расстановке сил будет создано 50000 лишних объектов и система вместо того, чтобы выполнять все действия в нужной последовательности будет метаться между потоками. Я тут не понимаю за счёт чего можно ожидать выигрыш в производительности, даже чисто теоретически. Хотя: я ни на чём не настаиваю - может и не прав. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: нет Всего: 154 |
тебе система столько не даст событием например (не тем, которое - делегат, а тем, которое объект ядра) Оптимальный вариант - асинхронный ввод-вывод Добавлено через 1 минуту и 55 секунд количество потоков должно зависеть от того, сколько процессоров - ядер на машине |
|||
|
||||
SpaceSpace |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 10.4.2007 Где: Самара Репутация: 2 Всего: 10 |
севетую потестить. пускай сначала 2 потока, если есть реальный выигрыш - остановись на 2ух, 3 - уже толпа в мире 2уядерных машин)
-------------------- Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение. 70-565 MCPD Enterprise 3.5 |
|||
|
||||
MasterOfCode |
|
||||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
На каждом разное, на моем одно, на других 2. А сколько даст?
Что произойдет в данном случаи когда итерации перевалят за N? -------------------- ![]() |
||||
|
|||||
SpaceSpace |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 10.4.2007 Где: Самара Репутация: 2 Всего: 10 |
все что угодно. от простых тормозов и и зависания, до дедлоков и необходимости ребутить все нафик. смотри у тебя 2 узких места минимум: количество ядер, хард. Субд чтобы слить тебе инфу на хард -читает с него, хард занят, потом пишет в него - хард занят. если все файлы у тебя уже в памяти а не на диске то выгружать одновременно все равно будет только 1 файл. При увеличении количесва потоков все может начать работать медленнее. потесть, говорю же -------------------- Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение. 70-565 MCPD Enterprise 3.5 |
|||
|
||||
Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: нет Всего: 154 |
да где-то после сотни начнутся жуткие тормоза
все будет ограничено скоростью работы жесткого диска, системного кэша и самой БД, если можешь, сделай выгрузку асинхронной |
||||
|
|||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
Ок. Для этого нужно:
Можно немножко подробнее? -------------------- ![]() |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: нет Всего: 154 |
у тебя есть БД, запрос к которой можно выполнить асинхронно, когда его выполнение завершится, тебе нужно будет начать запись на диск, то-же асинхронно, в этом случае действительно будут записываться несколько файлов параллельно.
Добавлено через 45 секунд я это на шарпе никогда не делал, на принцип не зависит от ЯП, хоть на питоне пиши) |
|||
|
||||
MasterOfCode |
|
|||
![]() elwin ![]() ![]() Профиль Группа: Участник Сообщений: 740 Регистрация: 24.4.2008 Где: World.Russia.Tyum en Репутация: 4 Всего: 27 |
MSDN перервыл не где не нашел онного, кинте ссылкой плизз! -------------------- ![]() |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: нет Всего: 154 |
||||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |