Одна сеть для параллельной модели Java

Java задняя часть

В этой статье давайте рассмотрим модель проектирования параллелизма.

Параллельные системы могут быть реализованы с использованием различных моделей параллелизма, которые описывают, как потоки в системе взаимодействуют для выполнения параллельных задач. Различные модели параллелизма разделяют задачи по-разному, и потоки могут общаться и взаимодействовать по-разному.

Модели параллелизма очень похожи на распределенные системы.

Модель параллелизма на самом деле очень похожа на модель распределенной системы.线程общаться друг с другом, в то время как в модели распределенной системы进程общаться друг с другом. Однако по сути процессы и потоки также очень похожи. Вот почему параллельная модель и распределенная модель очень похожи.

Распределенные системы обычно сталкиваются с большим количеством проблем и проблем, чем параллельные системы, такие как взаимодействие процессов, сетевые исключения или удаленные зависания машины и т. д. Но параллельная модель также сталкивается с такими проблемами, как сбой процессора, проблемы с сетевой картой, проблемы с жестким диском и т. д.

Поскольку модель параллелизма и распределенная модель похожи, они могут учиться друг у друга, например, модель, используемая для распределения потоков, похожа на модель балансировки нагрузки в распределенной системной среде.

На самом деле, говоря прямо, идея распределенной модели является производной от дедукции и развития модели параллелизма.

признать два государства

Важным аспектом модели параллелизма является то, должны ли потоки共享状态, имеет共享状态все еще独立状态. Общее состояние также означает, что некоторое состояние является общим для разных потоков.

Государство на самом деле数据, например один или несколько объектов. Когда потоки хотят обмениваться данными, это вызовет竞态条件или死锁И другие вопросы. Конечно, эти проблемы только возможны, и конкретная реализация зависит от того, безопасно ли вы используете и получаете доступ к общим объектам.

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

Использование независимого состояния упрощает наш дизайн, потому что только один поток может получить доступ к объекту, который неизменен, даже если он заменяется.

Модель параллелизма

Параллельный рабочий

Первая модель параллелизма — это параллельная рабочая модель, в которой клиент передает задачи代理人(Delegator), а затем распределить работу по разным工人(worker). Как показано ниже

Основная идея параллельного воркера состоит в том, что он в основном имеет два процесса, а именно агент и воркер.Делегатор отвечает за получение задач от клиента и доставку задач конкретному воркеру для обработки.После того, как воркер завершит обработку , он возвращает результат Делегатору.После того, как Делегатор получает результаты, обработанные Воркером, он агрегирует их и доставляет клиенту.

Модель параллельного рабочего процесса — очень распространенная модель в модели параллелизма Java. многиеjava.util.concurrentВсе инструменты параллелизма в пакете используют эту модель.

Преимущества параллельных рабочих

Очень очевидная особенность модели параллельных рабочих процессов заключается в том, что ее легко понять.Чтобы улучшить параллелизм системы, вы можете добавить несколько рабочих для выполнения задач.

Еще одним преимуществом параллельной модели Worker является то, что она разбивает задачу на несколько небольших задач и выполняет их одновременно.Получив результат обработки Worker, Delegator вернет его клиенту. Весь процесс Worker -> Delegator -> Client да异步из.

Недостатки параллельных рабочих

Точно так же шаблон Parallel Worker также имеет некоторые скрытые недостатки.

Общее состояние может быть сложным

Реальный параллельный рабочий процесс сложнее, чем мы его себе представляли, главным образом потому, что параллельный рабочий процесс обычно обращается к некоторым общим данным в памяти или общей базе данных.

Эти общие состояния могут использовать некоторые рабочие очереди для хранения бизнес-данных, кэшей данных, пулов соединений с базами данных и т. д. При взаимодействии потоков потоки должны гарантировать, что общее состояние может использоваться другими потоками, а не просто оставаться в кеше ЦП, чтобы сделать себя доступными.Конечно, это все проблемы, которые программисты должны учитывать при проектировании. Тредов нужно избегать竞态条件,死锁и многие другие проблемы параллелизма, вызванные общим состоянием.

Когда несколько потоков обращаются к общим данным, параллелизм теряется, поскольку операционная система должна гарантировать, что только один поток может получить доступ к данным, что может привести к конфликтам и вытеснению общих данных. Потоки, которые не вытесняют ресурсы,阻塞.

Современные неблокирующие параллельные алгоритмы могут уменьшить конкуренцию и повысить производительность, но неблокирующие алгоритмы сложнее реализовать.

可持久化的数据结构(Persistent data structures)это еще один вариант. Постоянная структура данных всегда сохраняет предыдущую версию после модификации. Следовательно, если несколько потоков изменяют постоянную структуру данных одновременно, а один поток изменяет ее, модифицирующий поток получает ссылку на новую структуру данных.

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

Постоянные структуры данных, такие как链表(LinkedList)Низкая производительность оборудования. Каждый элемент в списке является объектом, и эти объекты разбросаны по памяти компьютера. Последовательный доступ на современных процессорах, как правило, намного быстрее, поэтому использование структур данных с последовательным доступом, таких как массивы, может повысить производительность. Кэш ЦП может загружать в кеш большой блок матриц и предоставлять ЦП доступ к данным в кеше ЦП сразу после загрузки. Для связанных списков практически невозможно разнести элементы по всей оперативной памяти.

работник без гражданства

Общее состояние может быть изменено другими потоками, поэтому рабочие должны повторно читать общее состояние каждый раз, когда они работают с ним, чтобы обеспечить правильную работу с репликами. Рабочий процесс, который не поддерживает состояние внутри потока, становится рабочим процессом без сохранения состояния.

Порядок работы не определен

Еще одним недостатком модели параллельной работы является то, что порядок заданий не определен, и нет гарантии, какие задания будут выполняться первыми или последними. Задача A назначается рабочему перед задачей B, но задача B может выполняться перед задачей A.

сборочная линия

Вторая модель параллелизма — это то, с чем мы часто сталкиваемся в производственной среде.流水线并发模型, ниже приведена блок-схема модели проектирования трубопровода.

Эта организационная структура подобна рабочему на конвейере на заводе: каждый рабочий выполняет только часть всей работы, после завершения которой рабочий передает работу следующему рабочему.

Каждая программа работает в своем собственном потоке и не делится состоянием друг с другом.Эта модель также известна как модель параллелизма без общего доступа.

Использование конвейерной модели параллелизма обычно разрабатывается как非阻塞I/O, то есть когда на работника не назначены никакие задачи, работник будет выполнять другую работу. Неблокирующий ввод-вывод означает, что когда рабочий процесс начинает операцию ввода-вывода, например чтение файла из сети, рабочий процесс не ждет завершения вызова ввода-вывода. Поскольку операции ввода-вывода выполняются медленно, ожидание ввода-вывода занимает очень много времени. В ожидании ввода-вывода ЦП может заниматься другими делами, а результат после завершения операции ввода-вывода будет передан следующему рабочему процессу. Ниже приведена блок-схема неблокирующего ввода-вывода.

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

Задача также может потребовать участия нескольких рабочих в завершении.

Реактивная система, управляемая событиями

Системы, использующие конвейерную модель, иногда называют响应式или事件驱动系统, эта модель будет реагировать в соответствии с внешними событиями, событием может быть HTTP-запрос или файл был загружен в память.

Модель актера

В модели Актера каждый Актер на самом деле является Рабочим, и каждый Актер может выполнять задачи.

Проще говоря, акторная модель — это модель параллелизма, которая определяет набор общих правил поведения и взаимодействия системных компонентов.Самым известным языком программирования, использующим этот набор правил, является Erlang. УчастникActorОтвечая на полученные сообщения, можно создать больше участников или отправить больше сообщений, готовясь к получению следующего сообщения.

Модель каналов

В модели канала работники обычно не взаимодействуют напрямую, вместо этого они обычно отправляют события в разные通道(Channel)Затем другие работники могут получать сообщения по этим каналам. Ниже приведена схема модели канала.

Иногда воркерам не нужно знать, кто следующий воркер, им нужно только написать автора в канал, а воркеры, слушающие канал, могут подписаться или отписаться, что снижает связь между воркерами и воркерами.

Преимущества конструкции трубопровода

По сравнению с моделью параллельного проектирования модель конвейера имеет некоторые преимущества, конкретные преимущества заключаются в следующем.

Не будет общего состояния

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

государственный работник

Рабочие в конвейерной конструкции имеют состояние, потому что они знают, что ни один другой поток не изменяет их собственные данные.С состоянием означает, что они могут хранить данные, с которыми им нужно работать, в памяти.С состоянием, как правило, быстрее, чем без состояния.

лучшая интеграция оборудования

Потому что конвейер можно представить как однопоточный, а преимущество однопоточной работы в том, что он может работать так же, как и аппаратное обеспечение. Поскольку рабочие процессы с отслеживанием состояния обычно кэшируют данные в ЦП, это обеспечивает более быстрый доступ к кэшированным данным.

сделать задачи более эффективными

Задачи в модели параллелизма конвейера могут быть упорядочены и обычно используются для записи и восстановления журнала.

Недостатки конструкции трубопровода

Недостаток конвейерной модели параллелизма заключается в том, что в задачах участвует несколько рабочих, и поэтому они могут быть распределены по нескольким классам в коде проекта. Поэтому трудно определить, какую задачу выполняет каждый работник. Конвейерную обработку также сложнее кодировать, разработка кода со многими вложенными обработчиками обратного вызова часто называется回调地狱. Ад обратного вызова трудно отследить для отладки.

функциональный параллелизм

Функциональная параллельная модель — это недавно предложенная модель параллелизма, и ее основная идея заключается в использовании вызовов функций для достижения цели. Передача сообщения эквивалентна вызову функции. Параметры, передаваемые функции, копируются, поэтому никакая сущность вне функции не может манипулировать данными внутри функции. Это заставляет функцию выполнять что-то вроде原子работать. Каждый вызов функции может выполняться независимо от любого другого вызова функции.

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

в JDK 1.7ForkAndJoinPoolКласс реализует функциональный параллелизм. Java 8 предлагает концепцию потока, а также можно перебирать большое количество коллекций, используя параллельные потоки.

Сложность функционального параллелизма заключается в том, чтобы знать поток вызовов функций и какие ЦП выполняют какие функции.Вызовы кросс-процессорных функций принесут дополнительные накладные расходы.

Привет, я cxuan, я написал четыре PDF-файла самостоятельно, а именно: Сводка основ Java, Сводка ядра HTTP, Основы компьютера, Сводка ядра операционной системы, я организовал их в PDF-файлы, вы можете подписаться на официальную учетную запись Java Builder, чтобы ответить на PDF для получения информации о качестве.