Показаны сообщения с ярлыком Ссылки. Показать все сообщения
Показаны сообщения с ярлыком Ссылки. Показать все сообщения

среда, 6 сентября 2017 г.

Структура управляемого объекта. Части 1 и 2

Что-то я забросил публикацию аннонсов своего англоязычного блога, что не хорошо. Исправляюсь.

Так вот, меня всегда интересовали несколько моментов с точки зрения структуры (layout) объекта: почему управляемый указатель указывает в середину объекта? Почему object header хранится по негативному индексу и что же именно может храниться в заголовке объекта?

На первый вопрос ответ дается в первом посте: Managed Object Internals, Part 1. Спойлеры: причина историческая, хотя есть и определенные сведения о том, что причины были связаны с эффективностью.

Во втором посте – Managed Object Internals, Part 2. Object header layout and the cost of locking в деталях рассматривается структура object header-а, а также концепция thin lock-ов. Интересно, что thin lock-и мало где описаны и о них мало кто знает. Thin lock – это более оптимальная реализация блокировок, добавленная в CLR 2.0, которая позволяет синхронизироваться на объекте с нулевыми (практически) накладными расходами за счет сохранения информации о блокировки внутри object header-а.

вторник, 21 февраля 2017 г.

Оптимизация типового пути исполнения

Роясь недавно в исходниках TPL Dataflow я заметил некоторый паттерн: многие функции разбиты на две. Основная называется обычным образом, AddElement или что-то в этом роде, а вторая – AddElement_Slow.

При этом мне очень понравилась причина, по которой это дело делалось: эта оптимизация позволяет заинлайнить метод в типовом кейсе. Казалось бы, а есть ли в этом толк? И, как оказалось, что есть (я бы удивился, если бы камрад Тауб решил бы использовать подобную оптимизацию не проверив, что она имеет смысл).

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

Ну, и подробности, у меня в англоязычном посте: “A common execution path optimization”.

понедельник, 7 октября 2013 г.

Статьи

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

Ниже приведены наиболее значимые и интересные статьи, разбитые по разным тематикам, типа “Проектирования по контракту” или “C# Tips and Tricks”. При этом статьи представлены в порядке, наиболее удобном для изучения соответствующей темы, а не в хронологическом порядке. Наиболее значимые статьи, с моей точки зрения, выделены жирным.

вторник, 2 апреля 2013 г.

Интересные интересности за март 2013

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

У того же Эрика Липперта есть десятки потрясающих постов, к которым можно возвращаться время от времени, но поскольку они редко всплывают на поверхность, то о них мало кто знает и помнит. В некотором роде, мое сообщение на rsdn-е под названием «Wanted! Старые хиты Эрика Липперта» можно считать нулевым выпуском этой серии постов, которую я планирую публиковать каждый месяц.

четверг, 11 октября 2012 г.

Источники о сборке мусора в .NET

Я тут недавно проводил курс по сборке мусора и в результате накопилось немалое количество источников, которые были бы полезны любому, кто хочет освоить эту тему более подробно. Ну, а чтобы дело не пропадало даром, я думаю будет здорово этими источниками поделиться.

Книги

  1. Under the Hood of .NET Memory Management by Chris Farrell and Nick Harrison
    Книга не большая (225 страниц), посвященная сборке мусора на платформе .NET и описанию типовых проблем работы с памятью и советов по их устранению. Очень неплохая книга, с достаточной глубиной изложения, но без особых дебрей и заумностей; основные моменты изложены хорошо, но я бы посоветовал относиться с осторожностью к некоторым советам по оптимизации и не забывать, что к ним нужно приступать только после профилирования.
    Электронная версия книги свободна доступна в Сети.
  2. Advanced .NET Debugging by Mario Heward
    Книга не по сборке мусора непосредственно, но в ней покрыты очень многие низкоуровневые детали, которые можно «пощупать» с помощью отладки. Очень толково написано, хотя иногда бывает перебор с количеством низкоуровневых деталей.
  3. Pro .NET Performance by Sasha Goldstein at al
    Интересная книга по производительности в целом, но и с разделом по сборке мусора. Книга кажется очень интересной, а точное мнение о ней, я надеюсь у меня появится через месяц-другой после ее прочтения.
  4. CLR via C# by Jeffrey Richter
    Классика. Хотя в этом плане здесь не менее полезной будет практически любая хорошая книга по языку C# и платформе .NET. C# 4 Unleashed, например, тоже подойдет для знакомства с этой темой.

вторник, 14 августа 2012 г.

Интересное из MSDN Magazine 2009-2012

Я не знаю, как другие, но лично я в последнее время не так часто читаю какие-то статьи из MSDN Magazine (не путать с MSDN). Может у этих статей релевантность не очень высокая, что я на них из поисковиков попадаю не часто, может быть юзабилити у веб-морды не очень для ручного поиска и категоризации материала, а может быть и то и другое.

Но, несмотря на это, в MSDN Magazine писали и продолжают писать очень интересные авторы и многие статьи заслуживают внимания. Поэтому я решил просмотреть выпуски за последние 4 года и выписать заинтересовавшие меня статьи по разным тематикам. Поскольку облака, веб, WP7 и SQL Server мне лично не слишком интересны, то в этой подборке ссылок информации по этим темам не будет (так что если это интересно вам, то придется проделать подобную же процедуру самостоятельно). В мой же список вошли следующие темы: многопоточное и параллельное программирование, .NET in general, паттерны и практики, распределенные системы, функциональное программирование и некоторые другие темы.

Так что если мой список интересов пересекается с вашим, то вы здесь наверняка найдете немало полезной информации. Все статьи разбиты по рубрикам и внутри каждой рубрики располагаются от самых свежих к самым старым; многие статьи на русском языке, хотя некоторые есть только в оригинале (хотя вы всегда можете на страничке выбрать нужный вам язык).