Поговорите о потоках и процессах, блокирующих и неблокирующих, синхронных и асинхронных.

внешний интерфейс Операционная система JavaScript Chrome

Как фронтенд девушка, чтобы подняться на более высокий уровень, я полна решимости улучшить свои навыки. Начнем с самых основных понятий~

потоки и процессы

концепция
  • 进程Это работающая программа с определенной независимой функцией на определенном наборе данных, а процесс — это независимая единица системы для распределения ресурсов и планирования.

  • 线程Процесс может содержать множество последовательных потоков выполнения, и каждый последовательный поток выполнения является потоком.线程Это сущность процесса и базовая единица планирования и диспетчеризации ЦП.Это базовая единица меньше, чем процесс, который может работать независимо. Сам поток в основном не владеет системными ресурсами, а имеет лишь несколько ресурсов, которые необходимы в работе (такие как счетчик программ, набор регистров и стек), но он может делиться всеми ресурсами, принадлежащими процессу, с другими принадлежащими ему потоками. тому же процессу [Блок пространства памяти и набор системных ресурсов]. ...[так сложно понять~~]

дать 🌰

  • [进程]: Все мы знаем программы.Программа статична, обычно хранится во внешней памяти. Когда программа вызывается в память для запуска, она становится процессом. Как следует из названия, процесс — это работающая программа, и это динамическая концепция. Это базовая единица распределения и планирования системных ресурсов. Например, в Windows каждое открытое и работающее приложение или фоновая программа, такая как работающая QQ, Google Chrome, Netease Cloud Music, Explorer и т. д., является进程.
  • [单线程] Процесс может содержать множество последовательных потоков выполнения, и каждый последовательный поток выполнения является线程.线程Существуют单线程а также多线程точки. Большинство программ, которые мы пишем с помощью js/c/java, представляют собой однопоточное программирование. Используйте основной файл в качестве точки входа в программу и выполняйте его последовательно, пока весь код не будет выполнен [ps: Обычно это Jiangzi, но также возможно, что определенная строка кода выдает ошибку, которая будет заблокирована. Эй, что блокирует, и см. ниже~].
  • [多线程] Многопоточность заключается в том, что существует несколько потоков исполнения ордеров «одновременно» исполняемых, и они не мешают между собой. Например, наш фон веб-сайта, если поддерживается только один поток, то только один пользователь имеет доступ к сайту, вы говорите, что это реальность? Ответ положительный. Поэтому мы должны создать поток для каждого пользователя, чтобы каждый пользователь мог «одновременно» получить доступ к сайту. [同时: профессиональный термин следует называть параллелизмом].

кстати, мы тоже смотрим并发а также并行, ну хотя не в этом дело... Параллелизм: это означает, что только одна инструкция (или один процесс, один поток) может выполняться одновременно, но поскольку скорость вращения процессора невообразима, с точки зрения макросов одновременно выполняется несколько инструкций. Параллелизм: несколько инструкций выполняются одновременно на нескольких процессорах одновременно.

разница между двумя

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

  1. Короче говоря, в программе есть по крайней мере один процесс, а у процесса есть по крайней мере один поток.
  2. Масштаб разделения потоков меньше, чем у процессов, что делает параллелизм многопоточных программ высоким.
  3. Кроме того, процесс имеет независимый блок памяти во время выполнения, и несколько потоков совместно используют память, что значительно повышает эффективность работы программы.
  4. Потоки по-прежнему отличаются от процессов во время выполнения. Каждый независимый поток имеет вход для выполнения программы, последовательность последовательного выполнения и выход для программы. Однако потоки не могут выполняться независимо и должны зависеть от прикладной программы, а прикладная программа обеспечивает управление выполнением нескольких потоков.
  5. С логической точки зрения значение многопоточности заключается в том, что в приложении есть несколько частей выполнения, которые могут выполняться одновременно. Однако операционная система не рассматривает несколько потоков как несколько независимых приложений для планирования процессов, управления ими и распределения ресурсов. Это важное различие между процессами и потоками.

блокирующий и не блокирующий

концепция

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

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

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

  • 非阻塞Ссылается на то, что функция не будет блокировать текущий поток, пока результат не может быть получен немедленно, а немедленно вернется

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

Синхронный и асинхронный

концепция
  • 同步: так называемая синхронизация означает, что когда выполнение задачи должно зависеть от другой задачи, зависимая задача может быть завершена только после ожидания завершения зависимой задачи, что является надежной последовательностью задач. Либо все успехи завершаются успехом, либо все неудачи терпят неудачу, а состояние двух задач может оставаться одинаковым.
  • 异步: Асинхронность означает, что вам не нужно ждать завершения зависимой задачи, а только уведомлять зависимую задачу о том, какую работу нужно завершить, и зависимая задача выполняется немедленно, пока вся задача завершается сама по себе. Что касается того, завершена ли зависимая задача в конце концов, задача, которая зависит от нее, не может быть определена, поэтому это ненадежная последовательность задач.
  • 消息通知: Концепция асинхронности связана с синхронизацией. При выполнении синхронного вызова вызывающая сторона должна дождаться уведомления об ответном сообщении (результате) перед последующим выполнением; при выполнении асинхронного вызова процедуры вызывающая сторона не может немедленно получить ответное сообщение (результат). Компонент, который фактически обрабатывает вызов, уведомляет вызывающего абонента о состоянии, уведомлении и обратном вызове, когда это делается.

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

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

  • синхронная блокировка

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

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

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

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

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

дать 🌰

Я люблю смотреть фильмы, так что давайте возьмем в качестве примера скачивание фильмов O(∩_∩)О, ха-ха~

  1. Блокировка синхронизации: я продолжаю держать iPad и уставившись на его загрузку прогресса, пока не завершится на 100%.

Синхронизация: дождитесь уведомления о завершении загрузки;

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

  1. Синхронная неблокировка: после того, как я нажимаю на задачу загрузки, я иду в прачечную (ну, я все еще очень прилежна~), и каждый раз, когда я смотрю на индикатор выполнения, он завершается, когда я вижу 100%.

Синхронизация отражается в: ожидании уведомления о завершении загрузки

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

  1. Асинхронная блокировка Я перешел на программное обеспечение с функцией уведомления о завершении загрузки, и после завершения загрузки раздается звуковой сигнал. Но я все еще ждал звука "динь" [не кажется глупым (⊙o⊙)...].

Асинхронность проявляется в: звуковом уведомлении о завершении загрузки;

Блокировка заключается в следующем: ожидание завершения загрузки "звон" уведомления В процессе нельзя обрабатывать другие задачи;

  1. Асинхронный неблокирующий: это все еще программное обеспечение для загрузки, которое будет издавать звук "динь". После того, как я отправлю задание на загрузку, я буду делать другие вещи, и когда я услышу звук "динь", я буду знать, что оно завершено.

Асинхронность проявляется в: звуковом уведомлении о завершении загрузки;

Неблокировка отражается в: ожидании завершения загрузки для завершения процесса звукового уведомления «динь», для выполнения других задач нужно только получить звуковое уведомление «динь»; [программное обеспечение обрабатывает задачу загрузки, я занимаюсь другими задачами, не нужно обращать внимание на прогресс, просто получите уведомление о программном «звонке», и все готово]