Разобравшись в том, как процессоры, память и кэш влияют на выполнение программ, вы сможете лучше понять производительность приложений и оптимизировать свой подход к их написанию.
Пользователь
Что на самом деле происходит, когда пользователь вбивает в браузер адрес google.com
Эта статья является попыткой ответа на старый вопрос для собеседований: «Что же случается, когда вы печатаете в адресной строке google.com и нажимаете Enter?» Мы попробуем разобраться в этом максимально подробно, не пропуская ни одной детали.
Примечание: публикация основана на содержании репозитория What happens when...
Представленный контент изобилует большим количеством терминов, в переводе некоторых из них могут присутствовать различные неточности. Если вы обнаружите какую-то ошибку в нашем переводе — напишите личным сообщением, и мы всё исправим.
Мы перенесли перевод в репозиторий GitHub и отправили Pull Request автору материала — оставляйте свои правки к тексту, и вместе мы сможем значительно улучшить его.
Boson — разработка СУБД «с нуля» (часть I)
После разработки виртуальной машины и компилятора в рамках хобби прошел год и захотелось попробовать реализовать ёмкий по алгоритмам проект по системному программированию.
Каждый разработчик "кровавого" enterprise в своей работе использует СУБД (SQL/NoSQL) и меня всегда искренне интересовало как они устроены в самом сердце, на самом низком уровне. Почитав документацию и исходный код SQLite и MongoDB, про используемые в индексах и интерпретаторах запросов алгоритмы, осознал, что несмотря на широкую распространенность и некую привычность, системы управления базами данных (СУБД) - это сложные программные продукты, реализация которых не всем под силу. Отлично - как раз то, что мне надо. С мотивацией разобрались, перейдем к делу.
Итак, для начала хорошо бы сформулировать высокоуровневую спецификацию требований. Boson - это легкая, встраиваемая документоориентированная база данных на С/С++
Одноплатники декабря уходящего 2022 года: от RISC-V платы до сетевого хранилища для Raspberry Pi Compute Module
Привет, Хабр! В декабре 2022 года производители электронных систем и компонентов продолжали свой труд по созданию все новых устройств. Их вышло достаточно много, а сегодня расскажем о 5 интересных моделях, которые могут заинтересовать многих. Это девайсы как для DIY-проектов, разрабатываемых в домашних условиях, так и для профессиональных систем. Все самое интересное — под катом.
Налоги в Грузии — релокация и эмиграция в юрисдикцию, что нужно знать работнику и работодателю из России
Друзья, всех приветствую! Сегодня, я хочу обсудить налогообложение физических лиц, граждан РФ в Грузии, поднять вопросы отсроченных налоговых рисков при смене и восстановлении статуса налогового резидента РФ, которые могут возникнуть у релокантов и эмигрантов, осуществляющих предпринимательскую или трудовую деятельность, в том числе удаленно с территории Грузии.
Топ полезных SQL-запросов для PostgreSQL
Статей о работе с PostgreSQL и её преимуществах достаточно много, но не всегда из них понятно, как следить за состоянием базы и метриками, влияющими на её оптимальную работу. В статье подробно рассмотрим SQL-запросы, которые помогут вам отслеживать эти показатели и просто могут быть полезны как пользователю.
Управление сроками на фрилансе: как не делать всё в последний момент и не опаздывать
Это глава из «Книги нормального фрилансера», в которой я делюсь опытом проектировщика интерфейсов, работающего на себя.
Если видишь до дедлайна, что не сдашь работу в срок,
Не спеши писать клиенту и расстраивать его.
Лучше скройся и втихую доведи всё до конца —
И клиент, поволновавшись, будет вдвое рад тебе!
По-настоящему управлять сроками можно при соблюдении двух условий. Первое: сроки называет фрилансер, а не клиент. Второе: сроки не зависят от третьих лиц.
С первым всё понятно: исполнитель оценивает, сколько времени ему понадобится на решение задачи, сверяется с календарём, закладывает болезни и другие непредвиденные обстоятельства, берёт небольшой запас сверху и только после этого называет срок.
Я сам, когда берусь за задачу, требующую недели, обычно называю не меньше месяца. Если сдам работу раньше срока — никто не расстроится. Поначалу я боялся, что оценив работу в месяц и сделав её за несколько дней, вызову много вопросов у клиента, мол, почему он платит так много за такую «короткую» задачу. Но на практике…
Как уехать из России: расширенная подборка полезных ссылок для эмиграции
Привет! Меня зовут Коля, я создатель одного из крупнейших каналов про релокацию и работу за границей Remocate. В этой подборке постарался собрать все ссылки, которые могут пригодиться в ближайшие дни.
Как научиться инвестировать с нуля: годные курсы
Если вы много зарабатываете (ну, вдруг вы там айтишник, например?), то рано или поздно перед вами встанет вопрос инвестирования заработанных капиталов. Отдавать свои деньги в доверительное управление кому бы то ни было я бы не советовал (it's a trap!), но вот с обучением тоже могут возникнуть определенные проблемы.
Существует два основных типа курсов про то, «как правильно инвестировать»: 1) дорогие и бесполезные; 2) недорогие и толковые. Первых гораздо больше, но в этой статье речь пойдет про вторую категорию.
Глубокое погружение в Java Memory Model
Я провел в изучении JMM много часов и теперь делюсь с вами знаниями в простой и понятной форме.
В этой статье мы подробно разберем Java Memory Model (JMM) и применим полученные знания на практике. Да, в интернете накопилось достаточно много информации про JMM/happens-before, и, кажется, что очередную статью про такую заезженную тему можно пропускать мимо. Однако я постараюсь дать вам намного большее и глубокое понимание JMM, чем большинство информации в интернете. После прочтения этой статьи вы будете уверенно рассуждать о таких вещах как memory ordering, data race и happens-before. JMM — сложная тема и не стоит верить мне на слово, поэтому большинство моих утверждений подтверждается цитатами из спеки, дизассемблером и jcstress тестами.
Компьютеры быстры, но вы этого не знаете
Люди чертовски плохо разбираются в величинах, особенно в тех, которые не могут воспринимать биологически. Например, мы интуитивно понимаем, насколько тяжелее предмет массой 10 кг предмета массой 1 кг.
Ощущение величин можно улучшить, преобразовав их каким-нибудь образом в сигналы, знакомые мозгу.
Смотрели ли вы эти видео?
Второе нравится мне больше всего. Ежедневно я съедаю по чашке риса, так что измеряю состояние Джеффа не только наглядно, но и своим желудком.
Совсем недавно я внёс несколько оптимизаций в код, что помогло мне интуитивно понять, насколько быстро может работать компьютер. И я решил, что этим нужно поделиться.
Потоковая обработка на go1.18
В версии 1.18 языка Go появились генерики, дающие возможность писать обобщенный код, то есть код, не зависящий от конкретного типа данных. Например можно написать код, обрабатывающий потоки данных - применить к ним одну и ту же функцию, отфильтровать, просуммировать и т.д., не завязываясь на конкретные типы данных. Так как я вижу потенциал в парадигме поточной обработки с помощью итераторов/стримов и теперь есть возможность реализовать ее в Go, я решил сделать это.
Holy C++
В этой статье постараюсь затронуть все вещи, которые можно без зазрения совести выкинуть из С++ не потеряв ничего(кроме боли), уменьшить стандарт, нагрузку на создателей компиляторов, студентов изучающих язык и мемосоздавательный потенциал громадности С++
В первую очередь хочется убрать из языка то, что приводит к частым ошибкам и мешает развитию языка, тут идеальным кандидатом можно назвать
1 - union - сумм тип из 70х, в С идея хранения одного типа из нескольких в одном участке памяти выглядит неплохо и сейчас, ведь там все типы это набор байт с заданным размером.
В С++ же использование union это автоматическое undefined behavior, например:
Память в браузерах и в Node.js: ограничения, утечки и нестандартные оптимизации
Интро: почему я написал эту статью
Меня зовут Виктор, я разрабатываю страницу результатов поиска Яндекса. Несмотря на внешнюю простоту, поисковая выдача — сложная штука: на каждый запрос генерируется своя уникальная страница, на которой в зависимости от запроса может присутствовать блок Картинок, Карты, Переводчик, видеоплеер и многие другие компоненты. Все они должны запускаться и работать в памяти обычных бюджетных телефонов, которые использует большинство наших пользователей. Браузерам должно хватать ресурсов, чтобы пользователь не видел вот такого:
На своих серверах мы должны генерировать сотни миллионов уникальных страниц в сутки — это сложнее, чем просто отдавать одни и те же ресурсы. Генерация страницы не должна быть слишком требовательной к памяти сервера.
Разрабатывая проект на JavaScript (TypeScript, ClojureScript или каком-то другом языке, транслируемом в JavaScript), мы привыкли создавать объекты, массивы, строки и вообще писать код, как будто память бесконечна. Это не так. Я расскажу о видах проблем с памятью, о том, какие ограничения мы часто забываем и как их можно преодолеть. В ответ браузеры и пользователи скажут вам спасибо.
- Категории проблем с памятью
- Ограничения по памяти для разных типов данных
Heap
Buffer, TypedArray
String
Map, Set
Call stack
Типичные задачи, в которых можно наткнуться на ограничения по памяти - Soft-утечки
Пример из продакшена
Как получаются soft-утечки
Как их обнаружить
Как найти причину
1. Memory Allocation Timeline
2. Техника трёх снапшотов
3. queryObjects
Тренируемся находить утечки - Hard-утечки
Пример из продакшена
Как бороться - Нестандартные оптимизации памяти в Node.js
Исходный код
Module._pathCache
Несколько версий пакета в node_modules
require('./data.json') - Заключение
Распределенные Workflow на PHP. Часть 2
В первой, теоретической, части статьи мы разобрали зачем нужны Workflow, где они применяются и какие способы их реализации существуют. Наша компания занимается разработкой энтерпрайз-софта — для нас это больная тема. Поэтому мы давно искали инструмент, который позволит легко вписывать новые шаги в любую схему, не ломая существующую бизнес-логику. Нашли и на его основе сделали свою новую разработку. Теперь давайте перейдём к более практической части и разберем, на что способен Temporal PHP SDK.
Меня зовут Антон Титов. Я более 15 лет занимаюсь коммерческой разработкой. Являюсь соавтором Spiral Framework, RoadRunner и Cycle ORM. Основной стек: PHP и Golang.
Античность против Средневековья. Чьи армии сильней?
Меня часто спрашивают… Ненавижу такое начало постов, прямо отдает ванилькой инстаграмма. На самом деле меня не часто спрашивают, кто кого победит рыцарь или легионер. В сущности, даже не спрашивали – я сам один раз увидел такой вопрос в комментариях и немного призадумался.
Это не исследование в полном смысле этого слова, автор вполне осознает, что любое сравнение некорректно, у нас мало сведений, нужно учесть массу факторов и вот это вот все. Это просто научно-популярная статья, которая дает возможность посмотреть на военную историю под другим углом. Кроме того, поскольку в военной истории есть масса спорных и нерешенных вопросов, я буду брать какую либо точку зрения военного историка, либо излагать свои собственные мысли по данному вопросу (в любом случае, вы всегда можете уточнить, почему я так решил).
Несмотря на то, что античность и средневековье вроде как плавно друг в друга перетекают, представляем мы себе их несколько иначе. Античность – это, стало быть, амфитеатры, колонны и солдаты в туниках, а средневековье – это рыцари, замки и турниры. При этом, несмотря на разницу между ними в 1000-1500 лет воюют они донельзя схожим образом – тыкают острыми и тупыми предметами друг в друга, на что невольно напрашивается вопрос – а кто сильнее?
Псс, парень… индекс нужен?
Самый больной вопрос для любого разработчика, которому приходится вычитывать данные из базы: "Как сделать мой запрос быстрее?". Классический ответ - необходимо создать подходящий индекс. Но куда именно его стоит "накатывать", да и как вообще он должен выглядеть?..
Мы научили наш сервис визуализации планов PostgreSQL отвечать на эти вопросы, и под катом расскажем, чем именно он руководствуется в своих рекомендациях.
Люди работают не так много, как вы думаете
Как ты расслабляешься, да я особо и не напрягаюсь. Именно этот анекдот хотелось привести в преамбуле к данной переводной заметке. Это прямо манифест лени as is. Весьма любопытное столкновение западной и восточной культуры. Нам в М.Видео-Эльдорадо особо прокрастинировать некогда, но дискуссию можно продолжить в комментариях.
Все хуки и концепты React в одной статье
В первую очередь React это JS библиотека, а не полноценный фреймворк, так что для создания полноценного веб приложения тебе нужно знать много дополнительных вещей, чтобы использовать их вместе с React. В этой статье пойдет речь о React концептах, хуках и, конечно 😊 , хороших практиках.
Как мы ускорили выполнение запросов PostgreSQL в 100 раз
Существует великое множество статей об оптимизации PostgreSQL — эта «кроличья нора» весьма глубока. Когда несколько лет назад я начал разрабатывать бэкэнд аналитического сервиса, у меня уже был опыт работы с другими СУБД, такими как MySQL и SQL Server. Тем не менее, раньше мне не приходилось так фокусироваться на производительности. В прошлых проектах, над которыми я работал, либо не было жестких требований к времени обработки (DS/ML), либо не требовалось обрабатывать много строк одновременно (обыкновенные веб-приложения). Однако в этот раз мои запросы:
• состояли из 3-10 JOIN-ов по коррелирующим запросам;
• уielded от 10 до 1,000,000 строк;
• должны были выполняться в течение времени, определенного UX-ом;
• не могли быть hinted — пока Cloud SQL, управляемый PostgreSQL в Google Cloud, не стал поддерживать pg_hint_plan в конце 2021 года;
• запрещали прямой доступ к серверному процессу, чтобы, например, хакнуть некоторые perf — потому что PostgreSQL был managed.
Получение целого миллиона строк в одном API endpoint сигнализирует о проблеме в алгоритме или архитектуре. Конечно, все можно переписать и перепроектировать, но за это нужно платить.
У нас не нашлось «заклинания», которое решило бы все проблемы с производительностью SQL. Тем не менее, я упомяну здесь несколько дельных предложений, которые помогли нам и, надеюсь, смогут помочь читателю. Разумеется, это не какие-то сакральные знания. Но когда мы начинали оптимизацию, я был бы рад их прочитать или услышать.
Information
- Rating
- Does not participate
- Location
- Москва, Москва и Московская обл., Россия
- Registered
- Activity