Как стать автором
Обновить

Комментарии 4

https://ru.wikipedia.org/wiki/Многозадачность#:~:text=Многозада́чность (%D0%B0%D0%BD%D0%B3%D0%BB.,%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D0%B2%20%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D1%85%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0%D1%85.

асинхронность почему перепутана с многозадачностью. Асинхронность это для повышения отзывчивости главного (UI) потока. Долговыполняемые задачи отправлются в фон.

При http запрос выполняется до получения респонса после которого соединение может быть закрыто. В общем одновременное исполнение (паралельное) позволяет выполнить их быстрее чем по очереди (диаграмма Ганта) с учетом доступных вычислительных ресурсов. В большинстве случаев громаздить свои велосипед на уровне ЯВУ не требуется. Так как это решается на уровне операционной системы и т.д.

Кажется, опять начались статьи от студентов, которые хотят автомат за статью на Хабре...

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

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

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

Там совсем не так. Код программы может по мере необходимости подтягиваться с диска, если не хватает места в ОЗУ, а не наоборот (вытащили всё в оперативу, поняли, что погорячились и начали заталкивать обратно). Сразу отвечаю на возможный упрёк про swap disk, куда может выгружаться часть неиспользуемых данных.

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

Если есть основные части алгоритма, что тогда неосновные части алгоритма и где они выполняются?

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

Последующая операция при переводе с русского на русский означает после следующей (акроним). Соответственно два вопроса: куда делать следующая операция и что за способ выполнения наперёд.

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

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

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

Тут свалено в кучу всего понемногу: разрядность шины данных "процессор-память", которая фиксированная, подход (судя по всему отсылка к спорту, там set) и тактовая частота процессора.

Проблема здесь заключается в увеличении времени ожидания при большом количестве переключений

Можете расшифровать суть проблемы? Вот есть большое число переключений контекста (потока выполнения), а где время увеличилось и почему?

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

Ну это и есть как бы многопоточность))

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

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

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

А ведь этот текст случайно могли прочитать люди, работающие на реально (то бишь из коробки) многопоточных языках. Которые могут заметить, что 1000 потоков создать не такая уж проблема даже на четырёх ядрах.

Наличие GIL в CPython никак не мешает использовать данный ЯП в качестве основного инструмента при проектировании серверной части высокоэффективных веб-приложений.

Опыт подсказывает, что высокоэффективные веб-приложения довольно не всегда связаны с выбором языка программирования)

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

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

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

Да конечно, прям так одновременно стартовали четыре экземпляра (реплики) процесса и каждый строго и честно к своему ядру прицепился. Для этого надо постараться. На Питоне тем более. В реальности прилетят высокоприоритетные процессы, а они обязательно прилетят, и будут твои процессы обрабатываться абы в какой последовательности.

один поток, который в свою очередь выполняет несколько операций одновременно

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

асинхронность реализуется на уровне ОС, которая предоставляет необходимые сокеты

На сколько помню ОС (Линукс), там могут быть предоставлены файловые сокеты. Только не знал, что они предназначены для реализации асинхронности на уровне ОС.

Задачи могут иметь за собой некий алгоритм работы, иными словами, быть функциями, данные функции называются сопрограммами (coroutine), а задачами становятся, когда передаются циклу событий и стоят в очереди на выполнение.

Попробую разгрести логику.
1 Существуют сущности именуемые задачами, которые могут быть описаны неким алгоритмом поведения (а могут быть и не описаны, судя по формулировке)
2 Алгоритмы на самом деле представляют из себя функции, которые называются сопрограммами (coroutine)
3 При этом алгоритмы (которые есть функции и называются сопрограммами) становятся задачами, когда передаются циклу событий и стоят в очереди на выполнение.
Другими словами, задача с каждой итерацией в цикле озадачивается и стоит в очереди на выполнение. Прям рекурсия не иначе.

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

Что за интересные такие стратегии эффективного управления ограничениями ресурсов? Кеширование - это не совсем про ограничение ресурсов и тем более развёртывание нескольких серверов.

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

Не стыдно такое писать?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории