From 3a485f99278c2b11503eafddb84ae0de6ca6b7e5 Mon Sep 17 00:00:00 2001 From: Artyom Popov Date: Tue, 19 Nov 2019 11:04:53 +0200 Subject: [PATCH] ru: some fixes in blocking-vs-non-blocking guide (#2781) 1. Fixed index.md link for russian locale 2. Fixed some errors and typos 3. Added anchors to headers --- .../docs/guides/blocking-vs-non-blocking.md | 36 +++++++++---------- locale/ru/docs/guides/index.md | 2 +- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/locale/ru/docs/guides/blocking-vs-non-blocking.md b/locale/ru/docs/guides/blocking-vs-non-blocking.md index 76baae34710a7..ac93c288d8184 100644 --- a/locale/ru/docs/guides/blocking-vs-non-blocking.md +++ b/locale/ru/docs/guides/blocking-vs-non-blocking.md @@ -3,36 +3,36 @@ title: Блокирующие и Неблокирующие Вызовы layout: docs.hbs --- -# Обзор Блокирующих и Неблокирующих Вызовов +# Обзор Блокирующих и Неблокирующих Вызовов Этот обзор рассматривает разницу между **блокирующими** и **неблокирующими** вызовами в Node.js. Он ссылается на цикл событий (event loop) и библиотеку libuv, -однако предварительное знание этих тем не требуется. Предпологается, что +однако предварительное знание этих тем не требуется. Предполагается, что читатели имеют базовое понимание JavaScript и паттерна обратных вызовов (callback) в Node.js. > Обозначение "I/O" (Ввод/Вывод) в первую очередь ссылается на взаимодействие > с системным диском и сетью при поддержке [libuv](https://libuv.org/). -## Блокирование +## Блокирование О **блокировании** говорят, когда выполнение JS кода в Node.js -приостановленно до тех пор, пока не завершится работа сторонней операции (например, чтение -какого-нибудь файла). Так происходит, потому что цикл событий не может продолжить исполнение JavaScript, +приостановлено до тех пор, пока не завершится работа сторонней операции (например, чтение +какого-нибудь файла). Так происходит потому, что цикл событий не может продолжить исполнение JavaScript, так как работает **блокирующая** операция. В Node.js медленно исполняемый JS код не принято называть **блокирующим**, если причиной тому высокая нагрузка кода на процессор, а не ожидание завершения сторонней операции. Синхронные методы в стандартной библиотеке Node.js, -которые используют libuv, наиболее часто применяемые **блокирующие** операции. +которые используют libuv — наиболее часто применяемые **блокирующие** операции. Нативные модули также могут иметь **блокирующие** методы. Все I/O методы в стандартной библиотеке Node.js предоставляют свои асинхронные версии, которые являются **неблокирующими** и принимают функции обратного вызова в качестве аргумента. Некоторые методы также имеют свои **блокирующие** аналоги. -Названия таких методов закнчиваются на `Sync`. +Названия таких методов заканчиваются на `Sync`. -## Сравнение Кода +## Сравнение Кода **Блокирующие** методы исполняются **синхронно**, а **неблокирующие** методы исполняются **асинхронно**. @@ -41,7 +41,7 @@ layout: docs.hbs ```js const fs = require('fs'); -// исполнение кода заблокированно, пока файл не будет полностью считан +// исполнение кода заблокировано, пока файл не будет полностью считан const data = fs.readFileSync('/file.md'); ``` @@ -58,13 +58,13 @@ fs.readFile('/file.md', (err, data) => { **блокирует** исполнение любого нижеследующего кода, до тех пор, пока весь file.md не будет считан. Обратите внимание, если синхронная версия кода сгенерирует исключение, его нужно обработать, иначе процесс Node.js "упадёт". В асинхронном варианте -выбор сгенерировать исключение или нет оставлено на усмотрение программиста. +выбор — сгенерировать исключение или нет — оставлен на усмотрение программиста. Давайте немного расширим наш пример: ```js const fs = require('fs'); -// исполнение кода заблокированно, пока файл не будет полностью считан +// исполнение кода заблокировано, пока файл не будет полностью считан const data = fs.readFileSync('/file.md'); console.log(data); moreWork(); // функция будет исполнена, после console.log @@ -88,7 +88,7 @@ JavaScript может продолжаться, не дожидаясь окон дожидаться окончания чтения файла и других системных вызовов — ключевое инженерное решение, которое обеспечивает высокую пропускную способность Node.js. -## Конкурентность и Пропускная Способность +## Конкурентность и Пропускная Способность Исполнение JavaScript в Node.js является однопоточным. Поэтому, говоря о конкурентности (параллельности вычислений) в Node.js, подразумевают, что после того, как цикл событий обработал синхронный код, @@ -97,15 +97,15 @@ JavaScript может продолжаться, не дожидаясь окон В качестве примера возьмем запросы к веб-серверу. Допустим, обработка сервером одного запроса занимает 50мс. Из этих 50мс, 45мс уходит на операции чтения/записи в базу данных. -С базой данных можно взаимодействовать и **асинхронно**. При таком подходе, на каждый запрос +С базой данных можно взаимодействовать и **асинхронно**. При таком подходе на каждый запрос к веб-серверу **неблокирующая** асинхронная операция высвободит 45мс для обработки других запросов, а это существенная разница. Обработка конкурентной (параллельной) работы при помощи цикла событий в Node.js -отличается от подходов во многих других языках программрования, в которых могут +отличается от подходов во многих других языках программирования, в которых могут создаваться дополнительные потоки. -## Опасность смешивания Блокирующего и Неблокирующего Кода +## Опасность смешивания Блокирующего и Неблокирующего Кода Существуют паттерны, которые следует избегать при работе с I/O. Взглянем на пример: @@ -118,7 +118,7 @@ fs.readFile('/file.md', (err, data) => { fs.unlinkSync('/file.md'); ``` -В вышеукзанном примере метод `fs.unlinkSync()`, с высокой вероятностью, будет исполнен до +В вышеуказанном примере метод `fs.unlinkSync()` с высокой вероятностью будет исполнен до `fs.readFile()`. Это приведет к удалению файла до его прочтения. Лучше переписать этот код в **неблокирующем** виде, что гарантирует правильный порядок исполнения методов: @@ -134,9 +134,9 @@ fs.readFile('/file.md', (readFileErr, data) => { ``` В последнем примере **неблокирующий** вызов метода `fs.unlink()` расположен внутри функции обратного вызова -`fs.readFile()`. Такой подход гарантирует парвильную последовательность операций. +`fs.readFile()`. Такой подход гарантирует правильную последовательность операций. -## Дополнительные рессурсы +## Дополнительные ресурсы * [libuv](https://libuv.org/) * [О Node.js](https://nodejs.org/en/about/) diff --git a/locale/ru/docs/guides/index.md b/locale/ru/docs/guides/index.md index 51e969cc31ad1..abd1517624733 100644 --- a/locale/ru/docs/guides/index.md +++ b/locale/ru/docs/guides/index.md @@ -16,7 +16,7 @@ layout: docs.hbs ## Ключевые концепции Node.js -* [Блокирующие и Неблокирующие Вызовы](/en/docs/guides/blocking-vs-non-blocking/) +* [Блокирующие и Неблокирующие Вызовы](/ru/docs/guides/blocking-vs-non-blocking/) * [The Node.js Event Loop, Timers, and `process.nextTick()`](/en/docs/guides/event-loop-timers-and-nexttick/) * [Don't Block the Event Loop (or the Worker Pool)](/en/docs/guides/dont-block-the-event-loop/) * [Timers in Node.js](/en/docs/guides/timers-in-node/)