# Node.js и многопоточность
Одной из основных проблем многопоточного программирования в Node.js является отсутствие истинной многопоточности. Вместо этого Node.js использует модель “event loop” (цикл событий), которая позволяет выполнять только один поток кода за раз. Это может привести к снижению производительности, особенно при выполнении длительных операций.
Event loop - это основной рабочий цикл в Node.js, который обрабатывает все входящие события и выполняет JavaScript-код. Он работает в одном потоке и не может быть заблокирован, чтобы не остановить обработку других событий.
Асинхронные операции в JavaScript работают с использованием event loop. Когда вы вызываете асинхронную функцию, она не блокируется и возвращает результат сразу же, а затем добавляет задачу в очередь для выполнения в будущем. Затем event loop продолжает обрабатывать другие задачи, пока не дойдет до асинхронной операции и не выполнит ее.
Async/await не является истинной многопоточностью, так как JavaScript по-прежнему является однопоточным языком. Однако, использование async/await позволяет писать код более читаемым и удобным для понимания образом, имитируя многопоточность.
Одной из основных проблем многопоточного программирования в Node.js является отсутствие истинной многопоточности. Вместо этого Node.js использует модель “event loop” (цикл событий), которая позволяет выполнять только один поток кода за раз. Это может привести к снижению производительности, особенно при выполнении длительных операций.
Event loop - это основной рабочий цикл в Node.js, который обрабатывает все входящие события и выполняет JavaScript-код. Он работает в одном потоке и не может быть заблокирован, чтобы не остановить обработку других событий.
Асинхронные операции в JavaScript работают с использованием event loop. Когда вы вызываете асинхронную функцию, она не блокируется и возвращает результат сразу же, а затем добавляет задачу в очередь для выполнения в будущем. Затем event loop продолжает обрабатывать другие задачи, пока не дойдет до асинхронной операции и не выполнит ее.
Async/await не является истинной многопоточностью, так как JavaScript по-прежнему является однопоточным языком. Однако, использование async/await позволяет писать код более читаемым и удобным для понимания образом, имитируя многопоточность.
# C# и многопоточность
C# - язык программирования с поддержкой многопоточности, позволяющий выполнять несколько потоков кода одновременно. Это обеспечивает более высокую производительность приложений и позволяет выполнять несколько задач параллельно.
Пул потоков - коллекция готовых к выполнению потоков, доступных для использования в приложении. Пул позволяет оптимизировать использование ресурсов, сокращая время на создание новых потоков и освобождая ресурсы после их выполнения.
Использование пула потоков включает использование класса
C# - язык программирования с поддержкой многопоточности, позволяющий выполнять несколько потоков кода одновременно. Это обеспечивает более высокую производительность приложений и позволяет выполнять несколько задач параллельно.
Пул потоков - коллекция готовых к выполнению потоков, доступных для использования в приложении. Пул позволяет оптимизировать использование ресурсов, сокращая время на создание новых потоков и освобождая ресурсы после их выполнения.
Использование пула потоков включает использование класса
ThreadPool, а также вызов метода QueueUserWorkItem для использования ресурсов потоков. ThreadPool.QueueUserWorkItem(Work, null);Продвинутое использование пула потоков, должно включать использование
WaitCallback. Это делегат, передаваемый в метод, который будет выполнен в отдельном потоке, когда найдется свободный, для выполнения инструкций, поток.WaitCallback callback = new WaitCallback(Work);
ThreadPool.QueueUserWorkItem(callback, null);
# async/await foreach
Синтаксис
Читать далее...
https://wiki.lpavlov.site/en/CSharp/await_foreach
await foreach - это новый функционал, добавленный в C# 8.0, который позволяет асинхронно перебирать элементы коллекции, ожидая завершение асинхронных операций на каждой итерации.Синтаксис
await foreach выглядит следующим образом...Читать далее...
https://wiki.lpavlov.site/en/CSharp/await_foreach
Решил интересную кату/задачу по проектированию FSM.
Отличная проверка архитектурного мышления.
Сама задача -> https://www.codewars.com/kata/54acc128329e634e9a000362
Мое решение -> https://www.codewars.com/kata/reviews/5d7c35e601af060001599d37/groups/654a88f4becce60001e47304
Что такое FSM (Finite State Machine) -> https://wiki.lpavlov.site/en/Концепты/FiniteStateMachine
#kata #задача #архитектура
Отличная проверка архитектурного мышления.
Сама задача -> https://www.codewars.com/kata/54acc128329e634e9a000362
Мое решение -> https://www.codewars.com/kata/reviews/5d7c35e601af060001599d37/groups/654a88f4becce60001e47304
Что такое FSM (Finite State Machine) -> https://wiki.lpavlov.site/en/Концепты/FiniteStateMachine
#kata #задача #архитектура
Отличная задача на тренировку работы со строками, символами и индексами.
"Шифр Rail Fence используется для кодирования строки путем размещения символов по диагонали вдоль направляющих."
Например фраза
- depth 2:
Мое решение -> https://www.codewars.com/kata/reviews/5d712e8b19977500018f09f5/groups/654d0e3063e3da0001a39674
#kata #задача #строки #индексы
"Шифр Rail Fence используется для кодирования строки путем размещения символов по диагонали вдоль направляющих."
Например фраза
It specialist's tricks by Leonid Pavlov с некоторой глубиной шифрования будет выглядеть так:- depth 2:
I pcaitstik yLoi alvtseils' rcsb endPvo
- depth 10: Iiltrcvo tkavs sPps e'bdctyiis naiLole
- depth 20: Ivto lsvpaePc idailniosetL' sy bt rsikc
Сама задача -> https://www.codewars.com/kata/58c5577d61aefcf3ff000081Мое решение -> https://www.codewars.com/kata/reviews/5d712e8b19977500018f09f5/groups/654d0e3063e3da0001a39674
#kata #задача #строки #индексы
Знаете, какой будильник ставит себе ПМ, чтобы проснуться хоть в 4 утра?
Отложку на 04:01 с раскаткой релиза на прод, где точно есть критичный баг.
#fun_minute
Отложку на 04:01 с раскаткой релиза на прод, где точно есть критичный баг.
#fun_minute
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
# Weekend coding
Написал тут для себя приложение для смарт-часов, для работы по 🍅 Pomodoro подходу.
🏳️ Статья с процессом и демонстрацией промежуточных результатов: -> https://wiki.lpavlov.site/en/Kotlin/Guides/PomodoroApp
💻 Исходники: -> https://github.com/Zefirrat/PomodoroWatch/blob/master/README.md
➕ язык в копилочку (🖼️ Kotlin)
Написал тут для себя приложение для смарт-часов, для работы по 🍅 Pomodoro подходу.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
Один из моих ответов догнал принятый ответ, по баллам.
Еще и под конец года держусь в топ 20% пользователей.
Неплохо!
Еще и под конец года держусь в топ 20% пользователей.
Неплохо!
🔥1
Привет! Я представляю вам свой горячий проект – умный Telegram-бот, основанный на передовой технологии GPT! 🌐✨
🚀 Молниеносные Ответы: Получайте мгновенные и точные ответы на ваши вопросы.
📚 Генерация Текстов: Создавайте уникальные и качественные тексты в один миг.
🌐 Многофункциональность: Будь то помощник в учебе, генератор идей или просто компаньон в разговоре – мой бот всегда рядом.
🤖 Технология GPT: Мой бот основан на передовой технологии GPT, гарантируя выдающуюся точность и контекстность.
🌟 Легкость Использования: Без сложных шагов или капч – просто отправьте запрос и получайте результат!
Присоединяйтесь к моему боту и откройте для себя новые горизонты текстового взаимодействия! 💬🚀
Напишите "Привет", чтобы начать! 🌟
https://t.me/TextCraftGptBot
PS. Да, это сообщение написано с помощью бота. Налетай, пока бесплатно!
🚀 Молниеносные Ответы: Получайте мгновенные и точные ответы на ваши вопросы.
📚 Генерация Текстов: Создавайте уникальные и качественные тексты в один миг.
🌐 Многофункциональность: Будь то помощник в учебе, генератор идей или просто компаньон в разговоре – мой бот всегда рядом.
🤖 Технология GPT: Мой бот основан на передовой технологии GPT, гарантируя выдающуюся точность и контекстность.
🌟 Легкость Использования: Без сложных шагов или капч – просто отправьте запрос и получайте результат!
Присоединяйтесь к моему боту и откройте для себя новые горизонты текстового взаимодействия! 💬🚀
Напишите "Привет", чтобы начать! 🌟
https://t.me/TextCraftGptBot
PS. Да, это сообщение написано с помощью бота. Налетай, пока бесплатно!
🔥3
В новой версии магазина приложений Microsoft Store для Windows 10 и Windows 11 команда разработчиков Microsoft перешла с React на Shoelace, Lit и Vite на ASP.NET, заменив ими предыдущие технологии. Это изменение коснулось фронтенда и серверной части приложения.
В комментариях к одной из статей на Хабре пользователи обсуждают преимущества связки Vite и ASP.NET Core. Предполагают, что это может быть хорошим решением.
В комментариях к одной из статей на Хабре пользователи обсуждают преимущества связки Vite и ASP.NET Core. Предполагают, что это может быть хорошим решением.
👍1🤯1
Boilerplate код — это повторяющиеся фрагменты программного кода, которые обычно используются в начале или в конце различных частей программы. Boilerplate код может включать в себя различные стандартные процедуры, такие как инициализация переменных, обработка ошибок, вывод на экран и другие.
Вот несколько примеров boilerplate кода:
- Инициализация переменных:
- Обработка ошибок:
- Вывод на экран:
Вот несколько примеров boilerplate кода:
- Инициализация переменных:
int x = 0;
x = 0
- Обработка ошибок:
try {
// код
} catch (error) {
console.log(error);
}try {
// код
} catch (Exception e) {
System.out.println(e);
}- Вывод на экран:
print("Hello, world!")console.log("Hello, World!");Shebang — это последовательность символов, которая используется в Unix-подобных операционных системах для обозначения начала исполняемого файла. Она состоит из двух символов:
Например для shell:
-
-
Shebang позволяет операционной системе найти и запустить программу без указания полного пути к ней.
#!, за которыми следует имя программы.Например для shell:
-
#!/bin/sh-
#!/bin/bashShebang позволяет операционной системе найти и запустить программу без указания полного пути к ней.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1
# Что такое ARM64 и AMD64, и чем они отличаются?
ARM64 и AMD64, также известные как Aarch64: ARM architecture, 64-bit и AMD64: EM64T, x86_64 — это архитектуры процессоров.
ARM64 (Aarch64) — 64‑битная архитектура, разработанная компанией ARM Limited. Она используется в процессорах мобильных устройств, серверов, суперкомпьютеров и других вычислительных систем.
Процессоры с архитектурой ARM64/Aarch64:
* обеспечивают более высокую производительность и эффективность по сравнению с 32-битными процессорами;
* поддерживают больший объём оперативной памяти;
* могут работать с 64-битными приложениями и операционной системой.
Используется в мобильных устройствах, таких как смартфоны и планшеты, а также в серверах, игровых консолях, автомобилях и других устройствах.
x86–64, AMD64 или EM64T, или x86_64 - 64-х битная версия архитектуры x86, используемая в процессорах Intel и AMD. Она обеспечивает поддержку 64 бит и позволяет использовать более 4 ГБ оперативной памяти на каждом ядре процессора.
Процессоры x86_64 используются для выполнения 64 битных инструкций. Они также могут выполнять 32 битные инструкции, но это не рекомендуется, так как это может привести к снижению производительности и безопасности.
Процессоры x86_64, в отличие от процессоров ARM64, используют другой набор инструкций и имеют другую архитектуру. Процессоры ARM64 и x86_64 не являются взаимозаменяемыми, и программы, написанные для одного типа процессора, не всегда могут быть выполнены на другом типе процессора.
ARM64 и AMD64, также известные как Aarch64: ARM architecture, 64-bit и AMD64: EM64T, x86_64 — это архитектуры процессоров.
ARM64 (Aarch64) — 64‑битная архитектура, разработанная компанией ARM Limited. Она используется в процессорах мобильных устройств, серверов, суперкомпьютеров и других вычислительных систем.
Процессоры с архитектурой ARM64/Aarch64:
* обеспечивают более высокую производительность и эффективность по сравнению с 32-битными процессорами;
* поддерживают больший объём оперативной памяти;
* могут работать с 64-битными приложениями и операционной системой.
Используется в мобильных устройствах, таких как смартфоны и планшеты, а также в серверах, игровых консолях, автомобилях и других устройствах.
x86–64, AMD64 или EM64T, или x86_64 - 64-х битная версия архитектуры x86, используемая в процессорах Intel и AMD. Она обеспечивает поддержку 64 бит и позволяет использовать более 4 ГБ оперативной памяти на каждом ядре процессора.
Процессоры x86_64 используются для выполнения 64 битных инструкций. Они также могут выполнять 32 битные инструкции, но это не рекомендуется, так как это может привести к снижению производительности и безопасности.
Процессоры x86_64, в отличие от процессоров ARM64, используют другой набор инструкций и имеют другую архитектуру. Процессоры ARM64 и x86_64 не являются взаимозаменяемыми, и программы, написанные для одного типа процессора, не всегда могут быть выполнены на другом типе процессора.
В последнее время часто наблюдаю, как молодые разработчики сталкиваются с проблемами запуска, казалось бы рабочих, проектов, начатых до 2020 года.
Например:
Есть кроссплатформенный сервис, он себе прекрасно работает и живет, где-нибудь на windows server, или на старенькой Ubuntu, которую админы поднимали еще в "бородатом" 2015 году. И приходит молодой и энергичный разраб, или РП, и начинает ратовать и активно продвигать самые последние версии всех ОС и библиотек. А-ля "почему вы до сих пор работаете на этом старье?". И вот руководство согласовывает потратить пару часов, на то, чтобы перенести сборку и запуск более менее активных проектов, на новые машины, которые подняли админы, с самой последней (естественно последней long-term support) Ubuntu 22.04. Задача по переносу падает на джуна, т.к. "делов то: файлы сделать Ctrl+C -> Ctrl+V и запустилось!".
Но прошел 1 час, затем 2, 3, 8. Уже и пинговал, и curl проверял, но все время получает странные ошибки, связанные с OpenSSL, GSS и др. И вот уже второй день джун пытается открыть порты, изменить код, устанавливать различные версии СДК, но ничего не получается.
Чтож, все дело в том, что относительно старые проекты, зависят от не очень новых библиотек, или имеют конфигурацию, использующие TLS версии 1.0 и 1.1 - которые были удалены в ubuntu 20.04 и 22.04. Существуют различные способы исправления таких ошибок, например установка, или конфигурирование openssl, на использование легаси провайдеров (
Мораль сей басни такова:
1) закладывайте x2 часы на подводные камни
2) спрашивайте помощи у старших
3) РАБОТАЕТ - НЕ ТРОГАЙ! xD
Извините, я оставлю тут эти хэштеги для удобства:
#истории #ssl #tls
Например:
Есть кроссплатформенный сервис, он себе прекрасно работает и живет, где-нибудь на windows server, или на старенькой Ubuntu, которую админы поднимали еще в "бородатом" 2015 году. И приходит молодой и энергичный разраб, или РП, и начинает ратовать и активно продвигать самые последние версии всех ОС и библиотек. А-ля "почему вы до сих пор работаете на этом старье?". И вот руководство согласовывает потратить пару часов, на то, чтобы перенести сборку и запуск более менее активных проектов, на новые машины, которые подняли админы, с самой последней (естественно последней long-term support) Ubuntu 22.04. Задача по переносу падает на джуна, т.к. "делов то: файлы сделать Ctrl+C -> Ctrl+V и запустилось!".
Но прошел 1 час, затем 2, 3, 8. Уже и пинговал, и curl проверял, но все время получает странные ошибки, связанные с OpenSSL, GSS и др. И вот уже второй день джун пытается открыть порты, изменить код, устанавливать различные версии СДК, но ничего не получается.
Чтож, все дело в том, что относительно старые проекты, зависят от не очень новых библиотек, или имеют конфигурацию, использующие TLS версии 1.0 и 1.1 - которые были удалены в ubuntu 20.04 и 22.04. Существуют различные способы исправления таких ошибок, например установка, или конфигурирование openssl, на использование легаси провайдеров (
openssl md4 -provider legacy), или установка библиотек GSS (sudo apt-get -y install libgss-dev) - всё зависит от стека и окружения сборки.Мораль сей басни такова:
1) закладывайте x2 часы на подводные камни
2) спрашивайте помощи у старших
3) РАБОТАЕТ - НЕ ТРОГАЙ! xD
Извините, я оставлю тут эти хэштеги для удобства:
#истории #ssl #tls
🤩1
Короче говоря, релизнули Mojo.
Это язык программирования для Data Science, от создателей PyTorch и компаний-лидеров в сфере AI-инфраструктуры, и обещают, что его скорость работы в 35 000 раз быстрее python. Если его будут успешно использовать для обработки данных, то и для обучения нейросетей он тоже должен подойти. Вроде уже доступен в JupyterHub.
Если взглянуть на самые популярные области применения python - обучение ИИ, анализ и работа с данными, веб-разработка, скриптинг и автоматизация - то потенциально, Mojo может отобрать примерно 50% хлеба питонистов. Предполагаю, что на этом фоне и общая популярность Python может снижаться.
Хотя с другой стороны это похоже на C++ и C# в свое время, и возможно один из этих языков станет мейнстримом для молодежи, а другой хардкорный для олдов и супер-гиков.
Но лучше не учить питон сейчас, пока есть такая неопределенность, а уйти в более стабильные и менее хайповые языки.
Это язык программирования для Data Science, от создателей PyTorch и компаний-лидеров в сфере AI-инфраструктуры, и обещают, что его скорость работы в 35 000 раз быстрее python. Если его будут успешно использовать для обработки данных, то и для обучения нейросетей он тоже должен подойти. Вроде уже доступен в JupyterHub.
Если взглянуть на самые популярные области применения python - обучение ИИ, анализ и работа с данными, веб-разработка, скриптинг и автоматизация - то потенциально, Mojo может отобрать примерно 50% хлеба питонистов. Предполагаю, что на этом фоне и общая популярность Python может снижаться.
Хотя с другой стороны это похоже на C++ и C# в свое время, и возможно один из этих языков станет мейнстримом для молодежи, а другой хардкорный для олдов и супер-гиков.
Но лучше не учить питон сейчас, пока есть такая неопределенность, а уйти в более стабильные и менее хайповые языки.
Совершенно случайно наткнулся на диссертацию из UCI, от доктора философии в области информационных и компьютерных наук Roy T. Fielding.
В ней достаточно краткая выжимка по архитектуре REST,
Могу отметить параграф "5.1.6 Layered System", "5.1.7 Code-On-Demand", "5.3 REST Architectural Views". Достаточно много продвинутой информации, для тех, кому хочется большего, но кто уже устал перебирать статьи про REST, в формате "REST - это POST, GET и др."
#dissertation #uci #rest #architecture
В ней достаточно краткая выжимка по архитектуре REST,
Могу отметить параграф "5.1.6 Layered System", "5.1.7 Code-On-Demand", "5.3 REST Architectural Views". Достаточно много продвинутой информации, для тех, кому хочется большего, но кто уже устал перебирать статьи про REST, в формате "REST - это POST, GET и др."
#dissertation #uci #rest #architecture
🔥2
Вся информация в сети передается в виде пакетов. Поток данных разбивается специальным программным обеспечением на небольшие пакеты и передается через сеть интернет на целевой узел, а там собирается обратно.
Каждый пакет проходит на своем пути определенное количество узлов, пока достигнет своей цели. Причем, каждый пакет имеет свое время жизни. Это количество узлов, которые может пройти пакет перед тем, как он будет уничтожен. Этот параметр записывается в заголовке TTL, каждый маршрутизатор, через который будет проходить пакет уменьшает его на единицу. При TTL=0 пакет уничтожается, а отправителю отсылается сообщение Time Exceeded.
#http #how_internet_works
Каждый пакет проходит на своем пути определенное количество узлов, пока достигнет своей цели. Причем, каждый пакет имеет свое время жизни. Это количество узлов, которые может пройти пакет перед тем, как он будет уничтожен. Этот параметр записывается в заголовке TTL, каждый маршрутизатор, через который будет проходить пакет уменьшает его на единицу. При TTL=0 пакет уничтожается, а отправителю отсылается сообщение Time Exceeded.
#http #how_internet_works