Ответы пользователя по тегу Параллельные вычисления
  • Стоит ли углубленно изучать многопоточность, асинхронное и паралельное программирование?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Тут есть два смысла. Первое - это "проскочить" на собеседовании. Если ты будешь его проходить
    на дот-нетчика то полюбому что-нибудь спросят. Может попросят написать какую-то задачу с двумя
    потоками где состояние потоков как-то разделяется или события от одного идут к другому.

    Из канонических задач на конкуренцию я припоминаю "спящий парикмахер" или официант. Не помню смысл - погугли сам. И задача об "обедающих философах" которая просто моделирует дедлок. И в этой
    же задаче дается разьяснение как дедлок убрать.

    Из параллелизма есть задача параллельного умножения двух больших матриц. Очень популярная
    и многократно обсужденная почти во всех It-ресурсах.

    И второй смысл - это просто знать способы распараллеливания медленно работающих задач.

    Современные фреймворки - тяготеют к тому чтобы разработчик не встречался с задачей конкуренции.
    Яркий пример - акторные фреймворки (Akka, Storm). А в задачах биг-даты - практически все
    сводятся к map-reduce и если ты хорошо сделал partitioning для своих таблиц или файлов то тебе вообще
    ничего делать не надо. Фреймворк сам позаботится. Добавляй только ему ресурсы (процессоры или ноды).

    И любые задачи массовой обработки файлов и сетевых событий - автоматом поднимают проблему мультиптоточки.

    Тоесть почитать на эту тему - надо. Но упарываться совсем я-бы не стал. Более того, синтетические
    задачи
    которые приводят в учебниках или форумах часто поражают своей убогостью и ненужностью
    постановки. Там просто, споря о постановке можно половину проблем выкинуть или переформатировать
    так что и мультипоточка будет не нужна.

    Тоесть если будешь решать практические задачи - бери настоящие а не высосанные из пальца.
    Ответ написан
    Комментировать
  • Как убедиться что атомарные операции будут выполнены точно правильно?

    mayton2019
    @mayton2019
    Bigdata Engineer
    В данном исходнике нет проблемы атомиков. Но здесь есть проблема отсутсвия синхронизации потоков а и b.
    Нужно наладить синхронизацию и дальше атомики станут приносить ощутимую пользу.
    Ответ написан
    Комментировать
  • Как лучше организовать многопоточное добавление данных в словарь (Dictionary)?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Несколько мыслей.

    1. In-memory базы данных будут медленнее чем C# структуры данных. Им ведь надо перекидывать данные через границу процесса. Память не шарится соотв - сериализация-сетевые сокеты пускай даже локальные. Все это будет медленнее.

    2. Я не знаю ни одной структуры данных которая-бы себя хорошо вела при конкуретнтной вставке. Concurrent - коллекции нужно только в том случае когда результат вставки в ту-же милисекунду нужен вам на чтение как результат из другого потока. Это очень строгое требование и реально очень мало систем им обладают. Я-бы предложил следующее. Если 5 потоков пишут независимо без обратной связи - то пускай пишут в буферы в несколько килобайт. И пускай 6 поток периодически собирает эти буферы. Так можно уменьшить конкуренцию. Лаг можно регулировать. Сколько хотим? 10 мс? 100мс?

    Еще вариант - потоки пишут каждый в свой Dictionary. И периодически происходит merge. Пакетом. Тут надо померять performance. Вообще в конкурирующих работах с key-value ищут возможность сделать partitioning. Если удасться то будут конкурировать максимум 2 потока а не 5.
    Ответ написан
    Комментировать
  • В чем преимущества процессов над потоками?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Непонятно зачем в теме вопроса добавлено уточнение про GIL. Это специфика Python?

    Добавлю что понятие процесса и потока может уж очень сильно отличаться в разных средах. Процесс в Erlang/OTP - это по сути актор который существует в сильной изоляции от всего остального мира и шарит память с другими процессами только через систему месседжей. Поток в Java - вообще не мапится в поток операционной системы.

    Тоесть когда говорим о процессах и потоках то желательно сужать это определение до конкретной ОС и системы разработки.
    Ответ написан
  • Как на OpenCl работать с изображением?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Данный пример с чтением png - неудачный.
    Дело в том что декодирование png не параллелится. Оно будет выполнено на 1 ядре процессора. И это займет 80% времени. Я так думаю. А уже декорированную матрицу RGB - да можно процессить на Opencl разбивая картинку на строки или на фреймы. Но преимущества opencl будут потеряны. Ведь мы уже львиную часть времени простояли ожидая декодирования.
    Ответ написан
    Комментировать