|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||
Как правильно поступить для потокобезопасности17.02.2024, 07:19. Показов 3769. Ответов 62
Метки нет (Все метки)
Здравствуйте,
Есть код, обрабатывающий побайтно файл, заранее загруженный в byte[]. Потоки организуются средствами C# через Parallel.ForEach вот таким образом:
if выполнится, в другом потоке max изменится и когда будет исполняться Exchange, то оно по сути испортит данные? Логичнее ли сделать через lock весь if?Вопрос 2 - как правильно покидать Parallel.ForEach внутри кода, если там не получается использовать break? Я сейчас просто делаю метку к концу и прыгаю туда goto.
0
|
||||||
| 17.02.2024, 07:19 | |
|
Ответы с готовыми решениями:
62
Как правильно поступить? Как правильно поступить как правильно поступить? |
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|
| 19.02.2024, 09:57 [ТС] | |
|
0
|
|
|
|
|
| 19.02.2024, 10:01 | |
|
Не хотите слушать -, как сказал Usaga, - пишите как умеете.
А то, что у вас потом не работает, это следствие того, что вы пишите как умеете, а не как правильно. Мне вас уже лень переубеждать. У вас не работает? Это ваши проблемы, не мои.
0
|
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 19.02.2024, 10:18 [ТС] | ||
|
0
|
||
|
|
|||
| 19.02.2024, 10:41 | |||
|
Не по теме:
Я вначале решил что на MSDN действительно как-то невнятно написано, но нет: кто-то читает по диагонали. Рекомендации
0
|
|||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||
| 19.02.2024, 12:20 [ТС] | ||||
|
в целом не ясно зачем для lock сделали указание объекта если это формальность, но это вне рамок обсуждения и мне не слишком интересно. Далее, вынес object lockObject = new object(); за рамки лмбда-функции, но ему такое не нравится.
0
|
||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||
| 19.02.2024, 18:46 [ТС] | ||||||
В любом случае по скорости полный провал, в 4.5 раза медленнее чем последовательный код, но потребление ОЗУ 137 мегабайт, непонятно зачем столько ОЗУ. Ладно, для меня тема исчерпана.
0
|
||||||
|
|
||
| 19.02.2024, 19:09 | ||
|
Надеюсь теперь поймёте что ThreadLocal как раз тут и нужен. Ах да... я забыл - "это не поиск максимального значения". Мы пытаемся сделать что-то о чём не знаем. Но упорно пытаемся что-то советовать, насаждая своё понимание нормального программирования.
0
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||||||||||
| 19.02.2024, 20:28 [ТС] | |||||||||||
|
Из примера я правда не понял как им пользоваться и как отдавать данные из лямбды в основную программу.
Задавая вопрос - я хочу получить ответ, а не лекцию о правильном программировании чего-то придуманного вами или нотацию на тему моего нежелания "становиться лучшим в мире программистом". Учите своих жён и детей, а я сам как-то разберусь - учиться мне или нет.
0
|
|||||||||||
|
|
|||||
| 20.02.2024, 00:59 | |||||
|
Тут согласен. Форум добровольный, хочу читаю, хочу пишу. А вы в свою очередь, можете вообще ничего не писать.
4
|
|||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||||
| 20.02.2024, 08:17 [ТС] | ||||||||
|
Итак, возвращаясь к вопросу:
ThreadLocal не подойдёт, так как это породит необходимость повторного поиска, который тоже нужно будет распараллеливать, что опять породит ThreadLocal и т.д. Lock сильно тормозит работу кода и жрёт оперативку как не в себя. Попробую разобраться с реализацией через CompareExchange, так как Exchange работает хорошо, но if остаётся в подвешенном состоянии.
0
|
||||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|
| 25.02.2024, 07:14 [ТС] | |
|
Такой вопрос - можно ли потокам иметь уникальный номер не связанный с другим потоком, но чтобы он оставался фиксированным на протяжении всего хода выполнения?
Потоки привязаны к ядрам и было бы логично имея номер потока 1 после его окончания работы снова запустить другой поток тоже с номером 1, не пересекаясь. Тогда можно было бы результаты записывать в массив размерности числа ядер а окончательную проверку делать после закрытия всех потоков, даже для 128 ядер это всего 128 элементов массива.
0
|
|
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
|
| 25.02.2024, 09:13 | |
|
0
|
|
|
|
||
| 25.02.2024, 10:21 | ||
|
belalugoci, Самое частое решение: дробим все данные на блоки/батчи/группы/подмассивы, и скармливаем эти части отдельным потокам. Результат агрегируем и по заверешнию всех вычислений -- выводим результат из короткого массива. Прирост от многопоточности будет начиная с 1кк значений (и то не факт). Меньше запихивать в многопоток нет смысла. Пока вы будете озвучивать код и задачу кусками, вам будут накидывать фиг-пойми каких решений. "Универсальное" решение описал выше, но в зависимости от вашей задачи -- может быть куча ньюансов "как лучше". Опишите входной массив и что с ним нужно сделать. Можно словами, код потом подскажут.
0
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||
| 25.02.2024, 10:33 [ТС] | ||||||
|
Добавлено через 5 минут
0
|
||||||
|
|
|||||||
| 25.02.2024, 12:04 | |||||||
0
|
|||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||
| 25.02.2024, 15:03 [ТС] | ||||||
|
Wolfdp, очень медленно и будет кушать оперативку, идею я понял без примера, возможно смогу прикрутить к своему коду, спасибо. Во всяком случае Parallel.ForEach тут точно не подходит.
Не ясно только зачем ему столько ОЗУ, еще бы это компенсировалось скоростью - можно было бы понять.
0
|
||||||
|
Модератор
|
|||||
| 25.02.2024, 21:22 | |||||
|
Что за код вы тестируете? Если вот этот: Вернее выдаёт результат, что lock - это не бесплатная операция, что и так очевидно. Если вот этот: // много всего тут исполняется, трат на создание запуск отдельных задач, и трат на локировку для аккумуляцию результата.Так как у нас нет понимания что за код // много всего тут исполняется, то для нас результат вашего теста тоже полная бесмыслица.А если взять задачу в целом:
0
|
|||||
|
|
|
| 25.02.2024, 22:28 | |
|
belalugoci, на какой длине строки вы проверяли?
Добавлено через 5 минут А, ещё такой момент -- batch задавили часом не тоже по 5? Выше забыл упомянуть, но нужно чтобы одна группа была большой, т.к. создание/старт каждой группы отъедает время.
0
|
|
| 25.02.2024, 22:28 | |
|
Подскажите как правильно поступить как правильно поступить с COOKIE как правильно поступить с hover Отображение левого меню, как правильно поступить? Как правильно нужно поступить в текущей ситуации? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет
Новости компьютерного мира и их обсуждение (4)
Салют, шампанское, овации!
:drink:
|
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр.
Дословно, отклонённая. . .
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
|
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|