Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Большое кол-во потоков. 
:(
    Опции темы
MasterOfCode
Дата 2.12.2008, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



Вообщем у меня есть программа которая выгружает из БД файлы. Работа проходит быстро, но хотелось бы еще быстрее. Принцип работы таков: программа запускает поток в котором цикл, в каждой итерации цикла происходит  выгрузка файла. Довольно такой последовательный механизм. Хотелось бы сделать чтоб в каждой итерации цикла создавать свой поток на выгрузку одного файла. Есть два вопроса, первый чисто теоретический. Если в цикле 50 000 итераций и он создаст 50 000 потоков, то программа будет работать быстрее, не загнется? 
Как мне получить оповещение что поток прекратил работу?


--------------------
user posted image
PM ICQ   Вверх
diadiavova
Дата 2.12.2008, 08:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Я правильно понял проблему? Есть программа, работающая хорошо и быстро, так вот вопрос в том, а не вхренячить ли в неё полста тысяч потоков и посмотреть не загнётся ли. А потом ещё если не загнётся, то чтобы каждый поток(из 50000) выдавал оповещение, что дескать, работа выполнена. 
А оповестить легко, месседжбоксы запустить из каждого, и потом вручную закрывать.

А если серьёзно, то мне как-то странно, что при таких условиях, вопрос в том, будет ли прога быстрее работать, а не медленнее. Я, конечно не пробовал(как-то не додумался), но мне почему-то кажется, что идея плохая. Многопоточность ведь это только видимость параллельного выполнения нескольких действий одновременно. Просто при такой расстановке сил будет создано 50000 лишних объектов и система вместо того, чтобы выполнять все действия в нужной последовательности будет метаться между потоками. Я тут не понимаю за счёт чего можно ожидать выигрыш в производительности, даже чисто теоретически. 

Хотя: я ни на чём не настаиваю - может и не прав.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Lazin
Дата 2.12.2008, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: нет
Всего: 154



Цитата(MasterOfCode @  2.12.2008,  07:26 Найти цитируемый пост)
Если в цикле 50 000 итераций и он создаст 50 000 потоков, то программа будет работать быстрее, не загнется?

тебе система столько не даст

Цитата(MasterOfCode @  2.12.2008,  07:26 Найти цитируемый пост)
Как мне получить оповещение что поток прекратил работу?

событием например (не тем, которое - делегат, а тем, которое объект ядра)

Оптимальный вариант - асинхронный ввод-вывод

Добавлено через 1 минуту и 55 секунд
количество потоков должно зависеть от того, сколько процессоров - ядер на машине
PM MAIL Skype GTalk   Вверх
SpaceSpace
Дата 2.12.2008, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: 2
Всего: 10



севетую потестить. пускай сначала 2 потока, если есть реальный выигрыш - остановись на 2ух, 3 - уже толпа в мире 2уядерных машин)


--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
MasterOfCode
Дата 2.12.2008, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



Цитата(Lazin @  2.12.2008,  10:52 Найти цитируемый пост)
количество потоков должно зависеть от того, сколько процессоров - ядер на машине 

На каждом разное, на моем одно, на других 2.
Цитата(Lazin @  2.12.2008,  10:52 Найти цитируемый пост)
тебе система столько не даст

А сколько даст?
Код

while (drOra.Read())
{
    System.Threading.Thread thread = new System.Threading.Thread(Start);
    object obj = param;
    thread.Start(obj);
}

Что произойдет в данном случаи когда итерации перевалят за N?


--------------------
user posted image
PM ICQ   Вверх
SpaceSpace
Дата 2.12.2008, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 366
Регистрация: 10.4.2007
Где: Самара

Репутация: 2
Всего: 10



Цитата(MasterOfCode @  2.12.2008,  09:00 Найти цитируемый пост)
Что произойдет в данном случаи когда итерации перевалят за N? 

все что угодно. от простых тормозов и и зависания,
до дедлоков и необходимости ребутить все нафик.
смотри у тебя 2 узких места минимум: количество ядер, хард.
Субд чтобы слить тебе инфу на хард -читает с него, хард занят, потом пишет в него - хард занят.
если все файлы у тебя уже в памяти а не на диске то выгружать одновременно все равно будет только 1 файл.
При увеличении количесва потоков все может начать работать медленнее.
потесть, говорю же



--------------------
Репутация - самое ценное, что есть у человека. Зарабатывают годы, теряют за мгновение.
70-565
MCPD Enterprise 3.5 
PM MAIL   Вверх
Lazin
Дата 2.12.2008, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: нет
Всего: 154



Цитата(MasterOfCode @  2.12.2008,  09:00 Найти цитируемый пост)
Что произойдет в данном случаи когда итерации перевалят за N? 

да где-то после сотни начнутся жуткие тормоза

Цитата(MasterOfCode @  2.12.2008,  07:26 Найти цитируемый пост)
Принцип работы таков: программа запускает поток в котором цикл, в каждой итерации цикла происходит  выгрузка файла. Довольно такой последовательный механизм.

все будет ограничено скоростью работы жесткого диска, системного кэша и самой БД, если можешь, сделай выгрузку асинхронной
PM MAIL Skype GTalk   Вверх
MasterOfCode
Дата 2.12.2008, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



Цитата(SpaceSpace @  2.12.2008,  11:12 Найти цитируемый пост)
потесть, говорю же

Ок. Для этого нужно:
Цитата(Lazin @  2.12.2008,  10:52 Найти цитируемый пост)
событием например (не тем, которое - делегат, а тем, которое объект ядра)

Можно немножко подробнее?



--------------------
user posted image
PM ICQ   Вверх
Lazin
Дата 2.12.2008, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: нет
Всего: 154



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

Добавлено через 45 секунд
Цитата(MasterOfCode @  2.12.2008,  09:21 Найти цитируемый пост)
Можно немножко подробнее?

я это на шарпе никогда не делал, на принцип не зависит от ЯП, хоть на питоне пиши)
PM MAIL Skype GTalk   Вверх
MasterOfCode
Дата 2.12.2008, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: 4
Всего: 27



Цитата(Lazin @  2.12.2008,  11:24 Найти цитируемый пост)
у тебя есть БД, запрос к которой можно выполнить асинхронно, когда  его выполнение завершится, тебе нужно будет начать запись на диск, то-же асинхронно, в этом случае действительно будут записываться несколько файлов параллельно.

MSDN перервыл не где не нашел онного, кинте ссылкой плизз!


--------------------
user posted image
PM ICQ   Вверх
Lazin
Дата 2.12.2008, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: нет
Всего: 154



PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1132 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.