Кодовая Библиотека
170 subscribers
185 photos
54 videos
20 files
110 links
Мы публикуем лекции и книги по программированию, видеоуроки, доклады с IT конференций.
Download Telegram
Чем синхронный сервер отличается от асинхронного?

Вопрос может быть сформулирован как «сравните Jetty и Netty», или «зачем нужен Spring WebFlux».

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

Таким образом, если каждый запрос выполняется одну секунду, то при всего лишь 2000 запросов в секунду сервер расходует 2000 потоков. Потоки в ОС – ограниченный ресурс, и не важно как сконфигурирован ваш сервер – в какой-то момент производительность резко просядет.

Альтернативное решение – асинхронные сервера. В них для потоков обработки HTTP-запросов используется work stealing. В широком смысле, вызовы асинхронных функций не блокируют выполнение, а их результат вместо return value возвращается параметром коллбэка. В Java этот результат зачастую возвращается в виде объекта Future.

Чтобы вся обработка запроса стала действительно асинхронной, необходимо также избавиться от блокирующих операций. Иначе преимущество подхода с work stealing выродится в простой пул потоков. Блокирующая работа с файлами и сетью должна быть заменена на NIO, а для БД должен быть использован асинхронный драйвер.

#Java
Под капотом Python. Тонкости популярных конструкций with и contextmanager

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

https://habr.com/ru/companies/beeline_cloud/articles/749580/

#Python
Примеры исходного кода C++

Эта страница содержит примеры исходного кода функций стандартной библиотеки программирования C++.

https://www.sourcecodeexamples.net/p/cpp-source-code-examples.html

#cpp
MS-DOS v1.25, v2.0, v4.0 Source Code

Оригинальные исходники MS-DOS 1.25, 2.0 и 4.0 для справочных целей

Это репо содержит оригинальные исходные коды и скомпилированные двоичные файлы для MS-DOS v1.25 и MS-DOS v2.0, а также исходные коды для MS-DOS v4.00, совместно разработанной IBM и Microsoft.

Файлы MS-DOS v1.25 и v2.0 были первоначально выложены в общий доступ в Музее компьютерной истории 25 марта 2014 года и (пере)публикуются в этом репо, чтобы облегчить их поиск, ссылки на них в других работах, а также чтобы дать возможность исследовать и экспериментировать тем, кто интересуется ранними операционными системами для ПК.

https://github.com/microsoft/MS-DOS/
Konf

Простейший загрузчик конфигураций для Go, который читает/смотрит из файла, env, флага и облаков (AWS, Azure, GCP).

Основные возможности:

konf.Unmarshal для чтения конфигурации в любой тип объекта.
konf.OnChange для регистрации колбэков при изменении конфигурации.
konf.Explain для понимания, откуда загружается конфигурация.
Различные провайдеры для загрузки конфигурации из облаков (AWS, Azure и GCP).
Zero dependencies в core модуле, который поддерживает загрузку конфигурации из переменных окружения, флагов и встроенной файловой системы.

https://github.com/nil-go/konf

#golang
Совет по Java 💡

С помощью библиотеки Jinq (https://jinq.org) вы можете писать запросы к базам данных, используя потоки Java. Она обеспечивает стиль запросов, схожий с известной библиотекой .NET LINQ. Конечно, вы можете легко интегрировать Jinq с Spring Boot.

#java #jpa #streams
Go-like каналы на C++

Каналы (channels, pipes) – это удобная абстракция для построения приложений, работающих в многопоточной среде. Они используются для передачи сообщений между потоками и, одновременно с этим, как средство синхронизации потоков. Я буду ссылаться на "Go-style channels", т.к. на мой взгляд, важная особенность каналов в языке GO – это возможность их мультиплексировать.

Реализации каналов на языке C++, конечно же, есть, например, в библиотеке boost::fibers, можно найти реализацию двух видов каналов. В документации boost::fibers можно найти описания способов мультиплексирования, правда не самих каналов, но и к ним можно применить подобную технику.

https://habr.com/ru/articles/805561/

#cpp
Benedict

Если вы столкнулись с трудностями при работе со словарями в Python, то benedict может стать тем решением, которое вы искали.

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

Одной из ключевых особенностей benedict является поддержка keylists и keypaths. Это упрощает доступ к значениям в сложных словарях и работу с ними без необходимости вручную копаться во вложенных уровнях.

#Python
This media is not supported in your browser
VIEW IN TELEGRAM
Cassowary

Запускайте приложения Windows в Linux как родные, используйте приложения linux для запуска файлов, расположенных в windows vm, без необходимости установки приложений на vm. С простым в использовании графическим интерфейсом конфигурации

Cassowary поддерживает:
Запуск приложений Windows, как если бы они были родными приложениями
Открытие файлов с хоста Linux непосредственно в приложениях Windows
Использование приложений Linux для открытия файлов, находящихся на виртуальной машине Windows.
Обеспечение легкого доступа между гостевой и хостовой файловыми системами
Простая в использовании утилита настройки
Создание программы запуска приложений для Windows-приложений
Автоматическое приостановление работы ВМ, когда не используется приложение Windows, и автоматическое возобновление ее работы при необходимости (только для virt-manager)

https://github.com/casualsnek/cassowary
This media is not supported in your browser
VIEW IN TELEGRAM
Избегайте бесконечного вложения провайдеров в React.

Вместо этого объедините все ваши провайдеры с помощью композиции.
Путешествие в мир эмуляторов микропроцессоров

Тема разработки эмуляторов олдскульных микропроцессоров типа того же Intel 8080 не нова. Если вы уже разбираетесь в вопросе, то для вас этот пост не будет чем-то новым, разве что вы увидите еще один подход к реализации такого проекта. Для тех, кто ничего об этом не слышал – прошу под кат.

https://habr.com/ru/articles/850930/
This media is not supported in your browser
VIEW IN TELEGRAM
Становится ли дочерний компонент клиентского компонента также клиентским компонентом?
This media is not supported in your browser
VIEW IN TELEGRAM
⚛️ Как избежать ненужных useEffects в React

#react
Пример уменьшения размерности данных с помощью линейных и нелинейных методов в Python

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


https://habr.com/ru/articles/751050/

#python