# L1, L2, L3 кэш процессора
Современные процессоры обладают несколькими уровнями кэширования, которые служат для ускорения доступа к данным и инструкциям, хранящимся в основной памяти. Они позволяют сократить время доступа к часто используемым данным.
Кэш процессора представляет собой промежуточную память, которая служит буфером между процессором и основной памятью компьютера. Он предназначен для хранения часто используемых данных и инструкций, что позволяет сократить время их доступа и увеличить общую производительность системы. Современные процессоры обычно имеют несколько уровней кэша: L1, L2 и L3, каждый из которых имеет свою специфику и предназначение.
L1 кэш - это самый быстрый и ближайший к процессору уровень кэша. Он используется для хранения данных и инструкций, к которым процессор обращается наиболее часто. Размер L1 кэша обычно составляет от 32 до 256 КБ и он разделен на две части: данные и инструкции.
L2 кэш - служит для хранения данных, к которым часто обращается процессор, но которые не находятся в L1 кэше. Этот уровень кэша находится на том же кристалле процессора, что и L1 кэш, и имеет размер от 256 до 512 КБ.
L3 кэш - является самым медленным уровнем кэша, но и самым большим. Он обычно располагается на другом кристалле, чем L1 и L2 кэши, и может иметь размер от 1 до 64 МБ. Этот кэш используется для хранения данных, которые нужны многим ядрам процессора одновременно, и позволяет увеличить общую пропускную способность системы.
Современные процессоры обладают несколькими уровнями кэширования, которые служат для ускорения доступа к данным и инструкциям, хранящимся в основной памяти. Они позволяют сократить время доступа к часто используемым данным.
Кэш процессора представляет собой промежуточную память, которая служит буфером между процессором и основной памятью компьютера. Он предназначен для хранения часто используемых данных и инструкций, что позволяет сократить время их доступа и увеличить общую производительность системы. Современные процессоры обычно имеют несколько уровней кэша: L1, L2 и L3, каждый из которых имеет свою специфику и предназначение.
L1 кэш - это самый быстрый и ближайший к процессору уровень кэша. Он используется для хранения данных и инструкций, к которым процессор обращается наиболее часто. Размер L1 кэша обычно составляет от 32 до 256 КБ и он разделен на две части: данные и инструкции.
L2 кэш - служит для хранения данных, к которым часто обращается процессор, но которые не находятся в L1 кэше. Этот уровень кэша находится на том же кристалле процессора, что и L1 кэш, и имеет размер от 256 до 512 КБ.
L3 кэш - является самым медленным уровнем кэша, но и самым большим. Он обычно располагается на другом кристалле, чем L1 и L2 кэши, и может иметь размер от 1 до 64 МБ. Этот кэш используется для хранения данных, которые нужны многим ядрам процессора одновременно, и позволяет увеличить общую пропускную способность системы.
# 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