Search
Write a publication
Pull to refresh
120
0.2
Send message

Here be dragons: Управление памятью в Windows как оно есть [1/3]

Reading time8 min
Views181K

Каталог:
Один
Два
Три

Менеджер памяти (и связанные с ним вопросы контроллера кеша, менеджера ввода/вывода и пр) — одна из вещей, в которой (наряду с медициной и политикой) «разбираются все». Но даже люди «изучившие винду досконально» нет-нет, да и начинают писать чепуху вроде (не говоря уже о другой чепухе, написанной там же):
Грамотная работа с памятью!!! За все время использования у меня своп файл не увеличился ни на Килобайт. По этому Фаерфокс с 10-20 окнами сворачивается / разворачивается в/из трея как пуля. Такого эффекта я на винде добивался с отключенным свопом и с переносом tmp файлов на RAM диск.

Или к примеру μTorrent — у меня нет никаких оснований сомневаться в компетентности его авторов, но вот про работу памяти в Windows они со всей очевидностью знают мало. Не забываем и товарищей, производящих софт для слежения за производительностью и не имеющих ни малейшего понятия об управлении памятью в Windows (и поднявших по этому поводу истерику на пол интернета, на Ars-е даже был разбор полетов). Но самое потрясающее, что я видел всвязи с управлением памятью — это совет переместить pagefile на RAM-диск:
Из моих трех гигабайт под RAM disk был выделен один (на тот момент, когда на лаптопе еще была установлена XP), на котором я создал своп на 768МБ ...

Цель данной статьи — не полное описание работы менеджера памяти (не хватит ни места ни опыта), а попытка пролить хоть немного света на темное царство мифов и суеверий, окружающих вопросы управления памятью в Windows.
Читать дальше →

Ностальгические игры: Parasite Eve

Level of difficultyEasy
Reading time7 min
Views6.1K

Сегодня о компании Square вспоминают не с придыханием, а, скорее, с печальным вздохом, ведь за последнее десятилетие она слишком часто расстраивала фанатов. Компания, которая когда‑то создавала прекрасные, запоминающиеся игры, в наши дни, неоднократно облажавшись, продала западный бизнес за гроши и вернулась к тому, с чего начинала — работе лишь на территории Японии. Но вспомним о тех годах, когда почти каждый владелец PS One с теплотой в сердце вспоминал о Square и с трепетом ждал выхода нового хита от японцев, о временах до слияния со своим главным конкурентом (Enix), когда компания еще не превратилась в типичного корпоративного монстра, гоняющегося лишь за прибылью. Это была эпоха, когда гремели такие игровые титаны как Front Mission, Final Fantasy, Chrono Cross, Xenogears, Vagrant Story и Parasite Eve, о которой и пойдет речь в данной статье.

Читать далее

Как мы сокращаем время простоя при установке обновлений схемы базы данных. Советы разработчикам

Level of difficultyMedium
Reading time30 min
Views11K

Привет! Я работаю в компании Bercut, которая более 20 лет занимается разработкой и поддержкой ПО для операторов сотовой и фиксированной связи. Сегодня я хочу рассказать о наших подходах к сокращению времени простоя продуктивного комплекса при установке обновлений схемы данных на СУБД Oracle. Целевая аудитория — начинающие и продолжающие разработчики, которым интересно узнать о различных вариантах распараллеливания и ускорения работы DDL, DML и прочих штуках, облегчающих процесс отладки и установки.

Читать далее

Проблема построения оптимального плана выполнения запроса при использовании коллекций. Применение Extensible Optimizer

Level of difficultyMedium
Reading time7 min
Views5.1K

Привет! Я работаю в компании Bercut, мы более 20 лет занимается разработкой и поддержкой ПО для операторов сотовой и фиксированной связи. Прошел путь от инженера в отделе сопровождения до менеджера продукта. В последние годы работаю ведущим специалистом в отделе администрирования (Senior DBA) и решаю проблемы производительности высоконагруженных биллинговых базах данных, обслуживающих от сотен тысяч до десятков миллионов абонентов. Сегодня я хочу рассказать про проблему построения оптимального плана выполнения запроса при использовании коллекций в качестве входных переменных запроса и вариантах ее решения.

Читать далее

Борьба с  TOAST или будущее JSONB в PostgreSQL

Reading time9 min
Views24K

В PostgreSQL есть два типа данных: JSON и JSONB. Первый формат является текстовым хранилищем, в котором json хранится "as is",  второй — бинарным, в нем ключи отсортированы  (сначала по длине ключа, а потом по его названию), дубликаты удалены, а пробелы удалены.

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

Однако у постгреса есть серьёзная проблема, которая сказывается и на производительности JSONB  — это TOAST, и о ней я говорил в первой части. Сегодня я расскажу о том, как мы улучшили JSONB для того, чтобы существенно повысить его производительность.

Читать далее

Проклятье TOAST и с каким маслом его ест JSONB

Reading time7 min
Views13K

О роли формата JSON в эволюции реляционных баз данных я недавно рассказал на двух конференциях — HighLoad++ и Saint HighLoad++ 2021. А также о том, что мешает эффективно использовать JSONB (бинарный JSON)  и как с этим можно бороться.

Сегодня посмотрим на особенности работы с TOAST — отдельным хранилищем для длинных записей.  Начну с проклятия TOAST для JSON, а в следующей части расскажу, как это можно использовать в PostgreSQL, и за счет чего получится повысить производительность JSONB.

Читать далее

Алгоритмы быстрого умножения чисел: от столбика до Шенхаге-Штрассена

Level of difficultyMedium
Reading time26 min
Views49K

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

И уж конечно, никогда при написании a * b мы не задумываемся о том, как реализовано умножение чисел a и b в нашем языке. Какие вообще есть алгоритмы умножения? Это какая-то нетривиальная задача?

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

Скорее к формулам!

SQL HowTo: крупицы золота в реестре

Level of difficultyHard
Reading time7 min
Views10K

В большинстве учетных систем, типа нашего СБИС, рано или поздно возникает проблема быстрого отображения реестра, в который по просьбам бизнес‑пользователей накручено несколько комбинируемых фильтров с очень редкой выборкой, ну никак не ложащихся в вашу красивую структуру базы данных и индексов базовой таблицы реестра — что‑нибудь типа "список продаж покупателям, чей день рождения выпадает на 29 февраля".

Универсального способа сделать «хорошо» тут нет, но я расскажу про модель запроса, которая позволит вам дать пользователю быстрый отклик, но при этом весьма эффективно с точки зрения PostgreSQL.

Читать далее

Полное руководство по модулю asyncio в Python. Часть 9

Level of difficultyMedium
Reading time16 min
Views34K

Публикуем девятую, заключительную часть (12345678) перевода руководства по модулю asyncio в Python. Здесь вы найдёте разделы исходного материала с 23 по 26.

Читать далее

Cicada 3301: кого и куда должны были отобрать загадки таинственной «Цикады»? Часть 2

Level of difficultyEasy
Reading time14 min
Views60K

В первой части рассказа о том, как команда энтузиастов пыталась распутать загадки и шифры таинственной «Цикады 3301», мы дошли до момента, когда общедоступные послания 2012 года закончились. Маркус, Текк и немногие другие из тех, кто добрался до получения персонального письма с личными инструкциями, рассказали кое-что — но знаем о дальнейшем мы в основном с их слов.

Теперь попробуем проследить за тем, чем завершилось путешествие первой команды разгадывавших шифры «Цикады», что происходило в следующие годы с новыми циклами загадок, рассмотрим версии того, кто стоял за «Цикадой 3301» и зачем всё это делалось в принципе.
Читать дальше →

Cicada 3301: кого и куда должны были отобрать загадки таинственной «Цикады»? Часть 1

Level of difficultyEasy
Reading time10 min
Views51K

Рассуждая о крипоте в прошлой статье, мы коснулись темы одного из важнейших механизмов человеческого страха: неизвестности. Пугающая крипота нулевых перестала пугать потому, что превратилась во что-то хорошо известное, понятное и даже популярное. Точно так же рассказы Лавкрафта, мимикрировавшие подобно крипипасте под воспоминания, письма, дневниковые записи и рассказы очевидцев — куда лучше пугали до того, как его имя стало культовым, а его персонажи, начиная с Ктулху — любимейшими героями интернет-фольклора, мемов и даже персонажами детских книжек.

Однако целый ряд появлявшихся в сети феноменов, пусть и не всегда пугающих на уровне ранних крипипаст, до сих пор остаются неразгаданными. Кто и что делал с аккаунтом Webdriver Torso на YouTube, заполняя его сотнями тысяч видеороликов, и что из себя представляют найденные на том же видеохостинге аккаунты семейства «Unfavorable Semicircle»? Кто забрасывал Usenet странными сообщениями с заголовками Markovian Parallax Denigrate? Кем была записана «Самая загадочная песня в Интернете», видимо, в ФРГ начала 80-х? Кем был Чумной Доктор с видеозаписи 11B-X-1371, сочетавшей фотографии трупов с мест преступлений и фильмов ужасов с закодированными сообщениями? Была ли загадка от пользователя Publius Enigma о некоем закодированном послании в альбоме Pink Floyd «The Division Bell» 1994 года шуткой или чем-то большим?

Впрочем, самой масштабной и странной из подобных историй, на мой взгляд, стоит назвать «Цикаду 3301».
Читать дальше →

PostgreSQL под капотом. Часть 3. Инициализация бэкэнда

Reading time33 min
Views7.3K

Приветствую!

На прошлом шаге мы дошли до входной точки Postgres. Сегодня мы пройдемся по ней до главного цикла. Будут рассмотрены:

— Модули для работы с файлами и файловой системой

— Как SIGUSR1передает множественные значения

— Реализации хэш‑таблиц

— Представление и хранение GUC

и многое другое.

Читать далее

Нестандартный полиморфизм. Паттерн Type Erasure

Level of difficultyMedium
Reading time15 min
Views13K

Нестандартный полиморфизм. Паттерн Type Erasure.

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

Читать далее

Стоит ли до верится спел чек еру? Про стой пять ни чинный пост до бра

Reading time1 min
Views31K
image

     До вольно не редко приходиться на ходить враз личных текст ах не сколько о шибок. При чём большая части на писано во общем то грамот но, но нет-нет да и на рвётся глас на не верное при мнение слово форм. На пример из вечное не верное из пользование со ответствующих пост фиксов. По мимо э того в друг от делиться при ставка или при лепиться пред лог, как до ста точный при мер, и к роме того не редко до водиться не на ходить за пятых на за конных места х.

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

По чувствуй себя граммар-наци

PostgreSQL под капотом. Часть 1. Цикл сервера

Reading time7 min
Views16K

Продолжаем изучать исходный код PostgreSQL

В этот раз исследуем главный цикл сервера:

- Принятие входящих подключений;

- Проверка окружения;

- Обработка упавших воркеров.

Читать далее

Игровой программный рендеринг в 2022-м году

Reading time28 min
Views28K


Программный рендеринг был широко распространён в играх на ПК до повсеместного распространения т. н. 3d-ускорителей (видеокарт). Каждая игра содержала свой собственный код рендеринга, каждая игра имела свои уникальные особенности в нём. Но с распространением видеокарт программный рендеринг в играх умер.


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

Читать дальше →

Переезд проекта с SVN на Git

Reading time8 min
Views73K
image
Много лет подряд в качестве системы контроля версий для большого количества проектов использовали только SVN. Но наступил момент, когда количество разработчиков на одном из проектов заметно увеличилось, проект уже запущен в работу, и нужно как активно разрабатывать параллельно несколько фич, так и фиксить уже имеющиеся баги в оперативном режиме. Единый trunk в SVN не позволяет этого делать, а организация бранчей в нем же превращает жизнь разработчиков в ад. Поэтому было принято решение о переезде этого проекта с SVN на Git.
Читать дальше о том, как это делается от А до Я

Исследование формата бинарных файлов на Python

Reading time12 min
Views18K

Реверс-инжиниринг неизвестного бинарного формата файла – задачка нечастая, но, на мой взгляд, вкусная. Самое то, чтобы в пятницу с утра отвлечься от организационной текучки, техподдержки, бизнес-планов, заполнения восьмёрок в системах отчётности - и поиграть в Шерлока Холмса. В этой статье я расскажу об опыте изучения бинарного файла с временными данными технологических параметров и о небольшой фишке чтения хитрым способом сохранённых строк из другого формата. Файлы несложные, времени на анализ потребовалось немного, но мне было интересно, и вам, я надеюсь, тоже будет интересно.

Читать далее

Как Postgres хранит строки

Reading time6 min
Views21K

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

Мы будем рассматривать только файлы кучи (heap). Heap-файл — это просто файл записей. Не путайте heap-файл с heap-памятью. Хотя их использование очень похоже: хранение динамических данных.

Читать далее

NULL-значения в PostgreSQL: правила и исключения

Reading time8 min
Views62K

Навскидку многим кажется, что они знакомы с поведением NULL-значений в PostgreSQL, однако иногда неопределённые значения преподносят сюрпризы. Предлагаем вашему вниманию расшифровку доклада Алексея Борщева с PGConf.Russia 2022 — он был полностью посвящён особенностям NULL-значений в Postgres.

NULL простыми словами

Что такое SQL база данных? Согласно одному из определений, это просто набор взаимосвязанных таблиц. А что такое NULL? Обратимся к простому бытовому примеру: все мы задаём друг другу дежурный вопрос: «Как дела?». Часто мы получаем в ответ: «Да ничего...» Вот это «ничего» нам и нужно положить в базу данных — NULL, неопределённое, некорректное или неизвестное значение.

Читать далее

Information

Rating
4,155-th
Location
Магнитогорск, Челябинская обл., Россия
Registered
Activity