4 / 4 / 1
Регистрация: 12.06.2011
Сообщений: 111
|
|
1 | |
.NET 3.x Какие есть средства параллелизма в C# .NET 3.5?29.10.2013, 10:43. Показов 1218. Ответов 10
Метки нет Все метки)
(
0
|
|
29.10.2013, 10:43 | |
Ответы с готовыми решениями:
10
Какие есть средства рисования Какие средства для работы с XML существуют в .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 |
Да, увидел его, я так понимаю мне надо получить количество процессоров в системе и в цикле запустить потоки. Вопрос, вот мне надо массив обработать из 100 символов например. И у меня будет 4 потока. Я должен буду разделить массив на 4 части и каждую частичку передать в поток. А как мне потом после преобразования всех 4 частичек обратно соединить их в один итоговый массив? И как узнать, что все потоки закончились и можно идти дальше?
0
|
1245 / 1055 / 293
Регистрация: 07.03.2012
Сообщений: 3,245
|
|
29.10.2013, 11:25 | 4 |
Task ещё можно использовать
0
|
![]() 17438 / 12830 / 3361
Регистрация: 17.09.2011
Сообщений: 21,108
|
|
29.10.2013, 11:33 | 5 |
Не самая лучшая идея, т.к. вы не знаете и знать не можете, на скольких процессорах фактически будет выполняться ваша программа.
Ответ очевиден: не разделяйте массив. Зачем? Передавайте в поток не новый массив, а основной массив с информацией где начинать обработку и где заканчивать. Это уже зависит от выбранной модели многопоточности. Если будете вручную плодить потоки, создавая объекты Thread, то вызывайте в цикле на всех созданных потоках Join. Если будете использовать более правильный подход — через ThreadPool, то используйте конструкции для синхронизации. Семафор в вашем случае хорошо подойдет. Это .NET 4+
0
|
4 / 4 / 1
Регистрация: 12.06.2011
Сообщений: 111
|
|
29.10.2013, 12:05 [ТС] | 6 |
Environment.ProcessorCount - Возвращает число процессоров на текущем компьютере.
0
|
![]() 17438 / 12830 / 3361
Регистрация: 17.09.2011
Сообщений: 21,108
|
|
29.10.2013, 12:08 | 7 |
Да, но это не отменяет того факта, что вы не знаете и знать не можете, на скольких процессорах будет выполняться ваша программа.
0
|
4 / 4 / 1
Регистрация: 12.06.2011
Сообщений: 111
|
|
29.10.2013, 12:10 [ТС] | 8 |
Если будете использовать более правильный подход — через ThreadPool, то используйте конструкции для синхронизации. Семафор в вашем случае хорошо подойдет. - В этом то и есть моё задание, написать свой быдло код, а не использовать что то нормальное. Я бы вообще через PLINQ всё сделал за 5 минут =(
0
|
foo();
|
|
29.10.2013, 12:12 | 9 |
неужели совсем никак?
я конечно понимаю, что .Net автоматизирует большинство действий на низком уровне, но должны же быть какие-то способы самостоятельного распределения...
0
|
![]() 17438 / 12830 / 3361
Регистрация: 17.09.2011
Сообщений: 21,108
|
|
29.10.2013, 12:25 | 10 |
Пожалуй, фраза была черезчур категоричной
![]() Узнать конечно можно, но это значение может меняться в ходе работы приложения, что добавит дополнительной головной боли для организации оптимального количества потоков. Вместо самостоятельного разбрасывания потоков по процессорам, я бы сделал что-нибудь менее зависящее от количества ядер. Например, адаптивный алгоритм, который динамически уменьшает или увеличивает количество потоков в зависимости от улучшения/ухудшения производительности путем замера среднего времени, требуемого на выполнение операции.
1
|
Администратор
![]() |
|
29.10.2013, 13:02 | 11 |
0
|
29.10.2013, 13:02 | |
29.10.2013, 13:02 | |
Помогаю со студенческими работами здесь
11
Какие есть средства разработки под Oracle? Какие есть средства для работы с MySQL? Какие средства есть для работы с URI? Какие есть CASE средства построения БД для Lotus? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |