4 / 4 / 1
Регистрация: 12.06.2011
Сообщений: 111
1
.NET 3.x

Какие есть средства параллелизма в C# .NET 3.5?

29.10.2013, 10:43. Показов 1218. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть ли хоть что то там для параллелизма, кроме ThreadPool и BackgroundWorker?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2013, 10:43
Ответы с готовыми решениями:

Какие есть средства рисования
При помощи каких команд можно рисовать в этом языке программирования? Например знаю команды Line,...

Какие средства для работы с XML существуют в .NET?
Здравствуйте, уважаемые коллеги. Мой вопрос может быть покажется вам слишком элементарным... все...

Какие есть средства для рисования
Сейчас разбираюсь с рисованием в C#, хочу у знающих людей поинтересоваться: какими способами можно...

Какие есть средства для анонимности в Интернете?
Просто перечислите средства или технологии или методы... пример: VPN, Proxy, TOR и т.д. и т.п. ...

10
Эксперт .NET
17438 / 12830 / 3361
Регистрация: 17.09.2011
Сообщений: 21,108
29.10.2013, 10:53 2
Есть еще Thread.
0
4 / 4 / 1
Регистрация: 12.06.2011
Сообщений: 111
29.10.2013, 11:18  [ТС] 3
Цитата Сообщение от kolorotur Посмотреть сообщение
Есть еще Thread.
Да, увидел его, я так понимаю мне надо получить количество процессоров в системе и в цикле запустить потоки. Вопрос, вот мне надо массив обработать из 100 символов например. И у меня будет 4 потока. Я должен буду разделить массив на 4 части и каждую частичку передать в поток. А как мне потом после преобразования всех 4 частичек обратно соединить их в один итоговый массив? И как узнать, что все потоки закончились и можно идти дальше?
0
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,245
29.10.2013, 11:25 4
Task ещё можно использовать
0
Эксперт .NET
17438 / 12830 / 3361
Регистрация: 17.09.2011
Сообщений: 21,108
29.10.2013, 11:33 5
Цитата Сообщение от Vlad10 Посмотреть сообщение
я так понимаю мне надо получить количество процессоров в системе и в цикле запустить потоки.
Не самая лучшая идея, т.к. вы не знаете и знать не можете, на скольких процессорах фактически будет выполняться ваша программа.

Цитата Сообщение от Vlad10 Посмотреть сообщение
вот мне надо массив обработать из 100 символов например. И у меня будет 4 потока. Я должен буду разделить массив на 4 части и каждую частичку передать в поток. А как мне потом после преобразования всех 4 частичек обратно соединить их в один итоговый массив?
Ответ очевиден: не разделяйте массив. Зачем? Передавайте в поток не новый массив, а основной массив с информацией где начинать обработку и где заканчивать.

Цитата Сообщение от Vlad10 Посмотреть сообщение
И как узнать, что все потоки закончились и можно идти дальше?
Это уже зависит от выбранной модели многопоточности.
Если будете вручную плодить потоки, создавая объекты Thread, то вызывайте в цикле на всех созданных потоках Join.
Если будете использовать более правильный подход — через ThreadPool, то используйте конструкции для синхронизации. Семафор в вашем случае хорошо подойдет.

Цитата Сообщение от Монфрид Посмотреть сообщение
Task ещё можно использовать
Это .NET 4+
0
4 / 4 / 1
Регистрация: 12.06.2011
Сообщений: 111
29.10.2013, 12:05  [ТС] 6
Цитата Сообщение от kolorotur Посмотреть сообщение
Не самая лучшая идея, т.к. вы не знаете и знать не можете, на скольких процессорах фактически будет выполняться ваша программа.
Environment.ProcessorCount - Возвращает число процессоров на текущем компьютере.
0
Эксперт .NET
17438 / 12830 / 3361
Регистрация: 17.09.2011
Сообщений: 21,108
29.10.2013, 12:08 7
Цитата Сообщение от Vlad10 Посмотреть сообщение
Environment.ProcessorCount - Возвращает число процессоров на текущем компьютере.
Да, но это не отменяет того факта, что вы не знаете и знать не можете, на скольких процессорах будет выполняться ваша программа.
0
4 / 4 / 1
Регистрация: 12.06.2011
Сообщений: 111
29.10.2013, 12:10  [ТС] 8
Если будете использовать более правильный подход — через ThreadPool, то используйте конструкции для синхронизации. Семафор в вашем случае хорошо подойдет. - В этом то и есть моё задание, написать свой быдло код, а не использовать что то нормальное. Я бы вообще через PLINQ всё сделал за 5 минут =(
0
foo();
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
29.10.2013, 12:12 9
Цитата Сообщение от kolorotur Посмотреть сообщение
знать не можете
неужели совсем никак?
я конечно понимаю, что .Net автоматизирует большинство действий на низком уровне, но должны же быть какие-то способы самостоятельного распределения...
0
Эксперт .NET
17438 / 12830 / 3361
Регистрация: 17.09.2011
Сообщений: 21,108
29.10.2013, 12:25 10
Цитата Сообщение от rattrapper Посмотреть сообщение
неужели совсем никак?
Пожалуй, фраза была черезчур категоричной
Узнать конечно можно, но это значение может меняться в ходе работы приложения, что добавит дополнительной головной боли для организации оптимального количества потоков.

Вместо самостоятельного разбрасывания потоков по процессорам, я бы сделал что-нибудь менее зависящее от количества ядер. Например, адаптивный алгоритм, который динамически уменьшает или увеличивает количество потоков в зависимости от улучшения/ухудшения производительности путем замера среднего времени, требуемого на выполнение операции.
1
Администратор
Эксперт .NET
9427 / 4714 / 760
Регистрация: 17.04.2012
Сообщений: 9,570
Записей в блоге: 14
29.10.2013, 13:02 11
Цитата Сообщение от kolorotur Посмотреть сообщение
Например, адаптивный алгоритм, который динамически уменьшает или увеличивает количество потоков
Microsoft тоже так говорит
* Более эффективное и масштабируемое использование системных ресурсов.
В фоновом режиме задачи помещаются в очередь ThreadPool, усовершенствованную с помощью алгоритмов (например, поиска экстремума), которые определяют и настраивают количество потоков, повышающих производительность. Это делает задачи относительно простыми и позволяет создавать множество задач для использования точного параллелизма. В дополнение к этому для обеспечения балансировки нагрузки используются широко известные алгоритмы переноса нагрузки.

(Из преимуществ TPL и задач: MSDN)
0
29.10.2013, 13:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.10.2013, 13:02
Помогаю со студенческими работами здесь

Какие есть средства разработки под Oracle?
вот начал заниматься ораклом. Подскажите плз, что лучше использовать для работы с ним?

Какие есть средства для работы с MySQL?
Как можно на СИ++ удалять, читать и вставлять данные в базу данных MySQL?? Какие для этого есть...

Какие средства есть для работы с URI?
Есть набор ссылок. например http://www.qqq.com http://www.qqq.com/eee.rar (могут быть разные...

Какие есть CASE средства построения БД для Lotus?
Какие есть стредства построения модели БД для Lotus? Как ERWin для РСУБД????? Слыхал я, что IBM...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru