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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многопоточность в C#: теория. 
V
    Опции темы
nerezus
Дата 12.9.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



Есть некоторые ресурсы и их надо обработать в X потоков.
Как лучше организовать мультипоточность?

Создаем X потоков, в них цикл вечный. В цикле дергается 1 из ресурсов. Обрабатывается. Если ресурсов нет, то break.

Это очевидный способ. Есть ли что-то лучше? Я видел класс ThreadPool, но не очень понял, как его юзать и подойдет ли он.
Слушаю ваших советов.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
v_enom
Дата 21.9.2009, 16:58 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



по взаимодействию потоков много теории. Особенно по задачами синхронизации...так называемые гонки и тупики.  Посоветовать литературу не могу, бо сам изучал и делал в универе, у меня все в конспектах лежит.
поищите сперва инфу по этим темам, а уж как запустить Х потоков класса Thread проблем не будет
PM MAIL   Вверх
nerezus
Дата 21.9.2009, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



v_enom, в универе мало давали, максимум - это как избежать дэдлоков.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
v_enom
Дата 21.9.2009, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



есть 2 основные  проблемы:
гонки (оба процесса хотя доступ к ресурсу)
и тупики.
разрешаются они в основном 2 способами "критическая секция" (процесс полностью контролирует данные, пока они не перестанут ему быть нужными)
и синхронизация с помощью Synchronize.

Это так в билдере на С++ называется метод, на # наверняка что-то подобное.
Почитай про Threads  у Шилда, например.
Многопоточность вообще не проблема. Валом теории на русском.

мне бы кто с WCF объяснил.... 
PM MAIL   Вверх
nerezus
Дата 21.9.2009, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



v_enom, не, я про это все знаю ) Юзаю крит. секции и мьютексы. Просто мне кажется, что неудачно юзаю ;)


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Alca
Дата 9.11.2009, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Сколько потоков?


--------------------
PM WWW ICQ Skype Jabber   Вверх
nerezus
Дата 9.11.2009, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



Alca, 200+.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Alca
Дата 9.11.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Цитата

Я видел класс ThreadPool, но не очень понял, как его юзать и подойдет ли он.

http://forum.sources.ru/index.php?showtopic=271380

Это сообщение отредактировал(а) Alca - 9.11.2009, 18:17


--------------------
PM WWW ICQ Skype Jabber   Вверх
Ram1reS
Дата 11.11.2009, 10:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(nerezus @ 9.11.2009,  18:06)
Alca, 200+.

Вы уверены, что Вам действительно необходимы 200+ потоков?
Имхо кол-во потоков должно быть равно числу процессоров, иначе ОС тратит больше времени на переключение между ними, чем на полезную работу.
Юзайте ThreadPool, либо обычные threads, но в количестве Environment.ProcessorCount.
--------------------
 
PM MAIL ICQ   Вверх
nerezus
Дата 11.11.2009, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



Ram1reS, ну а как иначе распараллелить?)
200 процессов будут куда хуже, чем 200 потоков ;)
А с socket_select-подобными методами работы с сетью много гемора.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
tol05
Дата 11.11.2009, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 6
Всего: 170



Честно говоря, сама проблема не ясна. Что понимается под ресурсами? Какова задача приложения? Как организовано взаимодействие распределенных модулей? и т.п.

Было бы лучше ИМХО, перейти от абстракций к конкретике. А пока каждый из участников топика мирно рассуждает о своем ))
Для поддержки этого приятного диалога и я свои 5 копеек вставлю тогда...

nerezus, идея подписки на remote-события не рассматривалась? Я имею в виду ситуацию, когда не сервер трекает своих многосисленных клиентов, а просто подписывается на событие, публикуемое клиентом.

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


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
nerezus
Дата 11.11.2009, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



Допустим есть сервис, и на него надо заданное количество N(много больше M) повзаимодействовать продолжительно(десятки запросов в обе стороны за 1 конект), в M потоков.

Вот такая задача.



--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Lazin
Дата 11.11.2009, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



nerezus, а теперь точно так-же, но только понятно smile 
Цитата(nerezus @  12.9.2009,  13:58 Найти цитируемый пост)
Есть некоторые ресурсы и их надо обработать в X потоков.

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


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 6
Всего: 170



Цитата(nerezus @  11.11.2009,  19:02 Найти цитируемый пост)
Допустим есть сервис

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

Так что ...  говорить о том что создавать новый поток - накладно ... у меня уже и язык не поворачивается ))

Как-то эти накладные расходы меркнут по сравнению с расходами на коннекшены и интеракшены... Я бы тут о пуле коннекшенов думал, а не о пуле потоков )

По поводу потоков.... ИМХО, ThreadPool - юзать. В конечном счете в 99% случаях все к нему сводится. Как юзать - хорошо написано в msdn и у нашего незабвенного товарища Рихтера Джеффри.


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
nerezus
Дата 12.11.2009, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



Цитата

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

Цитата

Так что ...  говорить о том что создавать новый поток - накладно ... у меня уже и язык не поворачивается ))
 Ага вот ) Но так легче мне, сначала насоздавать и потом с ними работать, чтобы внутри каждого цикл куски работы брал в цикле.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




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


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

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