Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема с многопоnочностью vb.net / 10 сообщений из 10, страница 1 из 1
18.02.2016, 15:21
    #39174347
Donotlie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с многопоnочностью vb.net
Доброго времени суток. Я создаю многопоточную программу. У меня возникла такая проблема - Есть список с которым работает моя программа. Я не знаю как сделать так, что бы все потоки брали из этого списка строки по очереди и не пропускали их и не брали одни и те же.

Заранее спасибо!

Модератор: Тема перенесена из форума "Visual Basic".
...
Рейтинг: 0 / 0
18.02.2016, 16:28
    #39174482
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с многопоnочностью vb.net
Donotlie,

Попробуй использовать ConcurrentQueue. У неё методы безопасны для многопоточной работы. Или вручную самому следить, тогда использовать SyncLock
...
Рейтинг: 0 / 0
18.02.2016, 18:36
    #39174648
Donotlie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с многопоnочностью vb.net
VSVLAD, Спасибо. Интересный вариант. А есть какой мануал по ConcurrentQueue? А то на msdn не могу разобраться в написанном. Буду очень благодарен.
...
Рейтинг: 0 / 0
18.02.2016, 19:09
    #39174690
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с многопоnочностью vb.net
DonotlieVSVLAD, Спасибо. Интересный вариант. А есть какой мануал по ConcurrentQueue? А то на msdn не могу разобраться в написанном. Буду очень благодарен.
Я опечален.
...
Рейтинг: 0 / 0
18.02.2016, 19:18
    #39174700
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с многопоnочностью vb.net
Donotlie, поверь, тебе рано создавать многопоточные программы. Оставь многопоточность на потом, там столько проблем что сходу не описать, и надо все сразу уметь обойти. Освой пока все остальное.
...
Рейтинг: 0 / 0
18.02.2016, 19:28
    #39174711
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с многопоnочностью vb.net
И почитай про Закон Амдала , отрезвляет после маркетинга многопоточности .NET
Ускорять надо алгоритмами, а не надеяться на то что лишние ядра проца ускорят твой тормозной код.

Есть хороший анекдот: "Один землекоп выкопает яму метр Х метр Х метр за час, за сколько выкопают эту яму 600 землекопов?" Реши и представь как уместить 600 человек вокруг одного квадратного метра и чтобы они копали не мешая друг-другу. Это и есть многопоточность.
...
Рейтинг: 0 / 0
18.02.2016, 19:54
    #39174727
Donotlie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с многопоnочностью vb.net
Dima T, Спасибо за заботу) Алгоритм работает хорошо и с одним потоком, а если 25 потоков ставить, то время затрачивается гораздо меньше. При маленьких объёмах работы на это пофиг, но когда нужно выполнить по самые не балуй это очень положительно сказывается.

P.S. Делал кустарным способом и по этому из 100 строк проходило 95-99
...
Рейтинг: 0 / 0
18.02.2016, 20:25
    #39174744
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с многопоnочностью vb.net
DonotlieDima T, Спасибо за заботу) Алгоритм работает хорошо и с одним потоком, а если 25 потоков ставить, то время затрачивается гораздо меньше.
У тебя есть 25 ядер в процессоре? Если ядер 4 то обычно самое эффективное 5-6 потоков, дальше начинается спад производительности из-за частого переключения контекста, 25 потоков на 4 ядрах это как те 600 землекопов.

Не знаю стоит ли тебя далеко к основам отсылать, но советую почитай Рихтера
http://www.ozon.ru/context/detail/id/4079733/
http://www.ozon.ru/context/detail/id/21236101/
...
Рейтинг: 0 / 0
18.02.2016, 20:35
    #39174749
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с многопоnочностью vb.net
С ConcurrentQueue все просто:

добавить в очередь:
Код: c#
1.
MyConcurrentQueue.Enqueue(MyValue)


извлечь
Код: c#
1.
2.
3.
4.
5.
6.
MyType MyValue;
if(MyConcurrentQueue.TryDequeue(out MyValue)) {
   ... обработка MyValue
} else {
 // очередь пуста
}


но тут надо правильно обработать "очередь пуста", встать на ожидание события или завершить поток. Это и есть те самые трудности... читай книжки. Умнее станешь.
...
Рейтинг: 0 / 0
23.02.2016, 13:12
    #39177073
Donotlie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с многопоnочностью vb.net
Dima T, Спасибо! Теперь разобрался. 100 строк из 100)
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Проблема с многопоnочностью vb.net / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]