Stack vs. Heap (.NET)

Stack

Известен также как стек потока (thread stack) или стек вызовов (call stack).

  • Небольшая область оперативной памяти (несколько Мб, точный размер зависит от платформы).

  • Древнейший механизм. Известен со времён Тьюринга.

  • Работает по принципу стопки (LIFO). Допустимые операции — добавить наверх (push) и снять сверху (pop). Не нужен поиск или какой-либо “уход” за структурой. Поэтому стек очень быстрый.

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

  • Авторитетные люди предлагают считать стек деталью реализации.

Читать далее ▸


Value Type vs. Reference Type (.NET)

Различие между value- и reference-типами реализовано на двух уровнях:

  • После компиляции получается разный машинный код, который по-разному размещает объекты в памяти:

    Value Type Reference Type
    Где? В регистрах, на стеке, в составе массива или другого объекта В управляемой куче выделяется память; в код отдаётся ссылка на неё
    Что? Только поля объекта Заголовок, указатель на метаданные, поля объекта
  • У System.ValueType перекрытые методы Equals и GetHashCode выполняют универсальное структурное сравнение.

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

Читать далее ▸


Шпаргалка по многопоточности в .NET (System.Threading)

Parallel vs. Concurrent

  • Parallelism (параллелизм) — более узкий термин, подчёркивающий наличие нескольких вычислительных устройств (машин, процессоров, ядер).

  • Concurrency (одновременность) может быть реализована через разбиение на части и быстрое переключение между ними, что создаёт иллюзию параллелизма.

Но это занудство. Термины используют как синонимы даже в специализированных источниках.

Preemptive vs. Cooperative

  • Preemptive (вытесняющее) — способ переключения контекста на уровне операционной системы, когда процессы и потоки хотели бы занимать всё процессорное время, но планировщик принудительно их приостанавливает, чтобы дать поработать другим.

  • Cooperative (кооперативное) — способ переключения на уровне runtime или пользовательского кода, когда предусмотрены явные и/или неявные сигналы о готовности добровольно встать на паузу. Неявные сигналы — это например, остановка в ожидании I/O (сеть, диск) или другого системного вызова. Явные сигналы даются командой yield (уступить). Модули, взаимодействующие таким образом, называются сопрограммами (coroutine).

Читать далее ▸


Что такое .NET?

Тезисное, но ёмкое определение, актуальное на сегодняшний день.

Если нужно выделить одно самое главное слово, то .NET — это платформа либо экосистема. Платформа для создания ништяков — a platform for building stuff — как выразился Хансельман.

Старые версии (до 5.0) исторически называются .NET Framework

  • Done but not dead — не будет развиваться, но поддержка продолжается.
  • Windows only.
  • Proprietary software.
  • Установлен глобально в систему.
  • Web Forms остались здесь (и это хорошо)

Актуальные версии (начиная с 5.0) называются просто .NET

  • Cross platform: Linux, Mac, мобильные…
  • Open source, GitHub, MIT License.
  • Можно установить много версий на одну машину.
  • Чётные версии — LTS, long-term support.
  • Всё развитие здесь: новые фишки C#, обновления стандартных API, новые типы приложений (workloads), новые способы компиляции…

Читать далее ▸


Толстые хвосты

Эта статья — Jupyter-блокнот, в котором я пытаюсь обобщить текущий уровень моего понимания статистических распределений с толстыми хвостами, популярно описанных у Нассима Талеба и Бенуа Мандельброта.

Загрузим хитро подготовленные данные:

import numpy as np
data = np.loadtxt('data/fat-tails.tsv')

И посмотрим на гистограмму:

from matplotlib import pyplot as plt
plt.rcParams['figure.figsize'] = (8, 2)
plt.rcParams['figure.dpi'] = 144

def plot_hist():
    plt.hist(data, bins=35, density=True, color='silver')

plt.figure()
plot_hist()
plt.show()

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

Читать далее ▸