написать впереди
предыдущий постНа этот раз в мир параллелизма, пожалуйста, не пропуститеВсех с одновременным программированием закусок, затем мы постепенно за ужином, перед едой ужина, я хотел бы процитировать эти стихи: «пересечь как можно больше разных ракурсов, ближний и дальний разный уровень», далеко, чтобы увидеть профиль, вблизи, чтобы рассмотреть детали , постоянное переключение или обдумывание точки зрения на обучение
Глядя на параллелизм со стороны,Параллельное программирование можно разделить на три основные проблемы: разделение труда, синхронизация/сотрудничество и взаимное исключение.
Если вы работали, вы, должно быть, слышали о гибких шаблонах разработки или применяете их для выполнения повседневных рабочих задач Мы объясним эти три основные проблемы, используя процессы, с которыми вы знакомы.
разделение труда
Разделите текущую историю спринта на задачи «подходящего» размера и назначьте их «подходящим» членам команды для выполнения.
Существует два «подходящих», используемых здесь, и очень важно разделить историю в умеренно размещенные задачи, которые могут быть завершены. Гранулярность расщепления слишком грубые, что делает задачу более сложной, трудоемким трудоемким, и трудно сотрудничать с другими; гранулярность расщепления слишком хороша, что приводит к слишком многочисленным задачам, которые трудно управлять и отслеживать, и отходы энергии и ресурсы. (Соответствующие потоки могут лучше выполнить всю работу.Конечно, если один поток может легко справиться с этим, нет необходимости в нескольких потоках.); не менее важно договориться с нужным человеком для его завершения, а вопросы UX-UE передаются для решения бэкэнд-персоналу, что, очевидно, проблематично (Очевидно, что передача подпотокам того, что должен делать основной поток, не может решить проблему, и каждый поток делает то, что нужно, чтобы сыграть свою роль.)
Что касается разделения труда, то общий Исполнитель, модель производитель-потребитель, Fork/Join и т. д. — все это проявления идеи разделения труда.
Синхронизация/совместная работа
После того, как задача разделена, я должен ждать задачи Чжан Саня, а Чжан Сан должен ждать задачи Ли Си, что означает, что между задачами существует отношение зависимости.После завершения предыдущих задач последние задачи могут быть Продвинутые пользователи могут пройти Общение и несколько раз подтвердить, чтобы убедиться, что ваша задача может начать выполняться.Но перед лицом программы нам нужно понять метод связи программы, как уведомить последующий поток о выполнении задачи после того, как поток завершил задачу.
Все отношения синхронизации / сотрудничества могут быть представлены IF-Thans, иначе вы наиболее знакомы с:
if(前序任务完成){
execute();
}else{
wait();
}
Код выше просто говорит:Когда определенное условие не выполняется, поток должен ждать; когда определенное условие выполняется, поток необходимо разбудить для выполнения, сотрудничество между потоками может быть взаимодействием между основным потоком и дочерним потоком или взаимодействием между дочерним потоком и дочерним потоком.CountDownLatch и CyclicBarrier в Java SDK используются для решения проблемы взаимодействия потоков.
взаимоисключающий
Разделение труда и синхронизация подчеркивают производительность, а взаимное исключение подчеркивает правильность., что мы часто называем «безопасностью потоков», когда несколько потоковв то же времяПри доступе к общей переменной/переменной-члену может возникнуть неопределенность, и неопределенность в основном вызвана可见性
,原子性
,有序性
Эти три проблемы, и ядром решения этих проблем является взаимное исключение
взаимоисключающий
В то же время доступ к общей переменной разрешен только одному потоку.
Глядя на рисунок ниже, главная дорога является общей переменной. В каждый момент времени на главную дорогу может въезжать только одна машина. Понятно? "Крупнейшие мировые события, давно разделенные, должны быть объединены"
Точно так же в Java SDK также есть много взаимоисключающих решений, например, вы можете сразу подумать о ключевом слове synchronized, Lock, ThreadLocal и т. д. являются взаимоисключающими решениями.
Суммировать
Капиталисты лихорадочно извлекают прибавочную стоимость рабочих, чтобы получить максимальную выгоду. Когда вы сталкиваетесь с процессором, памятью, вводом-выводом этих рабочих, вы капиталист, вы должны думать о том, как充分榨取
их ценность
Когда работу может выполнять один работник, никогда не позволяйте ей выполняться двум людям (один поток может удовлетворить потребности, нет необходимости в многопоточности). Когда работают несколько работников, у них должно быть четкое разделение труда, гладкое сотрудничество и отсутствие противоречий.
Когда задача большая, поскольку работа ввода-вывода медленная, а процессор работает быстро, нет необходимости позволять ЦП ждать текущего ввода-вывода и переходить к выполнению других инструкций.榨取剩余价值
, как максимизировать его значение, что включает в себя последующие вопросы настройки, например, сколько потоков подходит и т. д.
Раздел проектный, синхронный и взаимоисключающий, без хорошего проекта не будет хорошей реализации, поэтому при разделении труда настоятельно рекомендуется рисовать эскизы и понимать, где узкие места, чтобы иметь лучшую реализацию.Я также поведу вас рисовать наброски содержания последующих глав.Проанализируйте проблему и постепенно выработайте привычку
Содержание этой главы можно кратко резюмировать следующим рисунком.Мы будем постепенно освещать содержимое листовых узлов.На этом этапе нам не нужно уделять слишком много внимания (если вы подходите и грызете исходники JDK код, вы можете потеряться в боли и в конечном итоге отказаться от своего продвинутого пути)
Чтобы понять три основные проблемы, вы должны полностью совместить реальность в жизни и проблемы параллелизма в программе.В принципе, вы можете найти прототип в реальной жизни.
В следующей статье мы поговорим о трех проблемах, которые вызывают безопасность потоков: «видимость, атомарность, упорядоченность», что включает в себя небольшое содержание JMM, вы можете понять это заранее, чтобы мы могли лучше сталкиваться
вопрос души
- Много ли сценариев для многопоточного программирования на работе?
- Когда вы думаете о многопоточности, вы думаете только о синхронизации?
- Параллелизм в Java упаковывает различные классы. Знакомы ли вы с лежащими в его основе концепциями реализации и дизайна?
инструменты повышения производительности
Рекомендуемое чтение
- Я использую SpringBoot каждый день, но до сих пор не понимаю, как RESTful API возвращает унифицированный формат данных?
- Двойная профессиональная модель: большие заводские высокочастотные поверхностные вопросы, легко получить
- Интервью не знает разницы между BeanFactory и ApplicationContext?
- Как разработать хороший RESTful API
- Красно-черное дерево, подробное объяснение супердинамических и статических диаграмм, простое и понятное
Добро пожаловать, чтобы продолжать обращать внимание на общественный номер: «Сун Гун И Бин».
- Передовая технология Java для обмена галантереей
- Резюме эффективных инструментов | Ответ на «Инструменты»
- Анализ вопроса интервью и ответ
- Сбор технических данных | Ответ на «данные»
Узнайте о стеке технологии Java легко и весело, думая о чтении детективных романов, и постепенно разлагайте технические проблемы на основе принципов упрощения сложных проблем, конкретизации абстрактных проблем и графики.Технология постоянно обновляется, пожалуйста, продолжайте платить внимание...