Search
Write a publication
Pull to refresh
4
0.1
Send message

Использование async и await в C# — лучшие практики

Reading time8 min
Views227K

Ключевые слова async и await, введённые в C# 5.0, значительно упрощают асинхронное программирование. Они также скрывают за собой некоторые сложности, которые, если вы потеряете бдительность, могут добавить проблем в ваш код. Описанные ниже практики пригодятся вам, если вы создаёте асинхронный код для .NET приложений.
Читать дальше →

C# 5 — об async/await с начала

Reading time5 min
Views257K
В недавно вышедшей Visual Studio 11 Beta встроена новая и главная фишка будущего C# 5 — асинхронное программирование с помощью async/await. Про нее уже написано достаточно много статей в том, числе на хабре — например, эта серия статей. Однако, я для себя так и не понял в чем суть нового синтаксиса, пока сам не попробовал его в деле. Данная статья — попытка самому структурировать и до конца разобраться с этим достаточно интересным инструментом и поделиться результатами с сообществом, рассказав про него немного иначе. Итак, поехали…
Читать дальше →

Что нового в C# 6.0?

Reading time4 min
Views147K
image

Microsoft выпустила предварительную версию Visual studio 2015 и .Net 4.6 для разработчиков. В новом C# 6.0 несколько новых возможностей, которые могут облегчить кодинг.

В этой статье рассмотрены новые возможности языка C# 6.0. Скачать новую VS можно по ссылке:
Microsoft Visual Studio Ultimate 2015 Preview

Инициализация свойств со значениями


В C# 6.0 мы можем инициализировать свойства со значениями, написав справа от них их значение. Это поможет избежать ошибки с null и пустыми значениями свойства.

Раньше:


public int Id { get; set; }
public string FirstName { get; set; }

Теперь:


public int Id { get; set; } = 1001;
public string FirstName { get; set; } = "Srinivas";
Читать дальше →

От шедулера к планировщику

Reading time7 min
Views16K
См. две другие статьи этой группы — Делаем многозадачность и Преемптивность: как отнять процессор.

Сразу просьба к строгим читателям. Если вы не поняли какой-либо термин из применённых — спросите, я подскажу, что я имел в виду. А если вам нравится другое написание или перевод этого термина — укажите его в комментарии. Я применяю те, которые нравятся мне.

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

Как я уже говорил, шедулер — это просто функция, которая отвечает на вопрос: какую нить и на сколько времени поставить на процессор.

Кстати, в SMP системе шедулер ничем не отличается от однопроцессорного. Вообще, чтобы проще понимать структуру взаимодействия сущностей на одном и нескольких процессорах, проще всего представить себе следующую модель: для каждого процессора есть нить «простоя» (которая работает, если вообще больше некому и просто останавливае процессор до прерывания), которая постоянно пытается «отдать» процессор (которым она как бы владеет) другим нитям, выбирая нить с помощью шедулера.

Говоря о шедулере нельзя не сказать о приоритетах.

Приоритет — свойство нити (или процесса) влияющее на конкуренцию этой нити с другими нитями за процессор.

Приоритет обычно описывается парой <класс приоритета, значение приоритета внутри класса>.
Читать дальше →

Космические туннели и железо на голову или зачем нам космодром «Восточный»

Reading time5 min
Views63K

На днях меня попросили проконсультировать инфографику РИА Новости, посвященную первому пуску с космодрома «Восточный». И там будет одно серьезное упрощение из-за ограничений формата материала. На самом деле, космодром «Восточный» нужен нам не из-за того, что большинство гражданских запусков происходит с космодрома «Байконур». Но, чтобы объяснить, зачем он нам нужен, придется рассказать, почему орбиту космического аппарата можно сравнить с туннелем, а также объяснить, что за «железо» падает с неба, и на кого оно падает.
Читать дальше →

C/C++: как измерять процессорное время

Reading time10 min
Views83K

image
КДПВ


От переводчика:
Большинство моих знакомых для измерения времени в разного вида бенчмарках в С++ используют chrono или, в особо запущенных случаях, ctime. Но для бенчмаркинга гораздо полезнее замерять процессорное время. Недавно я наткнулся на статью о кроссплатформенном замере процессорного времени и решил поделиться ею тут, возможно несколько увеличив качество местных бенчмарков.


P.S. Когда в статье написано "сегодня" или "сейчас", имеется ввиду "на момент выхода статьи", то есть, если я не ошибаюсь, март 2012. Ни я, ни автор не гарантируем, что это до сих пор так.
P.P.S. На момент публикации оригинал недоступен, но хранится в кэше Яндекса


Функции API, позволяющие получить процессорное время, использованное процессом, отличаются в разных операционных системах: Windows, Linux, OSX, BSD, Solaris, а также прочих UNIX-подобных ОС. Эта статья предоставляет кросс-платформенную функцию, получающую процессорное время процесса и объясняет, какие функции поддерживает каждая ОС.

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

Преемптивность: как отнять процессор

Reading time6 min
Views13K
Эта статья не имеет смысла без предыдущей, в которой описывались основные механизмы переключения контекстов в многозадачной ОС.

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

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

Но, как обычно, есть нюансы. См. код для интела.

Сам «отъём» процессора делается как в рамках обычного хардверного прерывания, обычно — по таймеру, так и в рамках «софтверного» прерывания — которое, собственно, такое же прерывание, но вызванное специальной инструкцией процессора. Такой способ переключения контекста нужен, если мы (например, в рамках примитива синхронизации) явно останавливаем нить и не хотим ждать, пока прилетит таймерное прерывание.
Читать дальше →

Делаем мультизадачность

Reading time6 min
Views15K
Я стараюсь чередовать статьи про разработку ОС вообще и специфические для ОС Фантом статьи. Эта статья — общего плана. Хотя, конечно, я буду давать примеры именно из кода Фантома.

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

Начнём с того, что есть два довольно мало связанных модуля — собственно подсистема переключения задач (контекстов) и подсистема шедулинга. Вторую мы сегодня обсуждать почти не будем, просто опишем кратко.

Шедулер — это функция, которая отвечает на вопрос «какой нити отдать процессор прямо сейчас». Всё. Простейший шедулер просто перебирает все нити (но, конечно, готовые к исполнению, не остановленные) по кругу (RR алгоритм). Реальный шедулер учитывает приоритеты, поведение нити (интерактивные получают больше, чем вычислительные), аффинити (на каком процессоре нить работала в прошлый раз) и т.п., при этом умеет сочетать несколько классов приоритетов. Типично это класс реального времени (если есть хотя бы одна нить этого класса — работает она), класс разделения времени и класс idle (получает процессор только если два предыдущих класса пустые, то есть в них нет нитей, готовых к исполнению).

На сём пока про шедулер закончим.

Перейдём к собственно подсистеме, которая умеет отнять процессор у одной нити и отдать его другой.
Читать дальше →

Устройство NVRAM в UEFI-совместимых прошивках, часть третья

Reading time7 min
Views17K
Перед вами третья часть моего повествования о форматах NVRAM, используемых UEFI-совместимыми прошивками различных производителей. В первой части я рассказывал об NVRAM вообще и о «стандартном» формате VSS, во второй — об интересных блоках, которые можно найти рядом с NVRAM в этом формате, а в этой речь пойдет о целой россыпи различных форматов, используемых в прошивках на платформе Phoenix SCT: FlashMap, EVSA, Intel uCode, CMDB, SLIC pubkey и SLIC marker.
Если вам интересно, что умудрились напридумывать на замену VSS разработчики из Phoenix — добро пожаловать под кат, только предупреждаю сразу, статья получилась достаточно длинной.
Phoenix SCT во все поля!

Реверс-инжиниринг визуальных новелл

Reading time18 min
Views43K

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

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

Tracert vs Traceroute

Reading time5 min
Views273K
В чем отличие маршрута пакета от его пути?
Стандартный механизм маршрутизации пакетов в интернете — per hop behavior — то есть каждый узел в сети принимает решение куда ему отправить пакет на основе информации, полученной от протоколов динамической маршрутизации и статически указанных администраторами маршрутов.

Маршрут — это интерфейс, в который нам надо послать пакет для достижения какого то узла назначения и адрес следующего маршрутизатора (next-hop):
R1#sh ip rou | i 40.  
	 40.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
O        40.0.0.0/31 [110/3] via 20.0.0.0, 00:01:54, FastEthernet0/0
O        40.1.1.1/32 [110/4] via 20.0.0.0, 00:00:05, FastEthernet0/0

Что такое путь? Путь — это список узлов, через которые прошел (пройдет) пакет:
 1  10.0.0.1  16.616 ms  16.270 ms  15.929 ms
 2  20.0.0.0  15.678 ms  15.157 ms  15.071 ms
 3  30.0.0.1  26.423 ms  26.081 ms  26.744 ms
 4  40.0.0.0  48.979 ms  48.674 ms  48.384 ms
 5  100.0.0.2  58.707 ms  58.773 ms  58.536 ms

Путь пакета можно посмотреть с помощью утилит tracert в OC Windows и traceroute в GNU/Linux и Unix-подобных системах. (другие команды, типа tracepath мы не рассматриваем).
Многие считают что этих утилит один и тот же принцип работы, но это не так. Давайте разберемся.
Читать дальше →

На взрыволёте к Юпитеру

Reading time8 min
Views210K

Ограниченность химических ракет была ясна ещё до начала регулярных космических пусков. Формула Циолковского прямо говорит, что на привычных нам двигателях можно слетать на Луну (стартуя на ракете тысячи в три тонн начальной массы и вернувшись в кораблике в несколько тонн), с огромным трудом долететь до Марса (с во много раз худшим соотношением начальной/конечной массы), но вот покорить Солнечную систему на химических ракетах нельзя. Поэтому уже в середине двадцатого века стали появляться альтернативные проекты, наиболее ярким из которых стал атомный взрыволёт (импульсная ракета). В этом посте мы поговорим о его конструкции, истории создания, перспективах в 21 веке, а ещё слетаем на нём к Юпитеру в Orbiter'е.
Читать дальше →

Какой ракетный двигатель самый лучший?

Reading time8 min
Views101K

Ракетные двигатели — одна из вершин технического прогресса. Работающие на пределе материалы, сотни атмосфер, тысячи градусов и сотни тонн тяги — это не может не восхищать. Но разных двигателей много, какие же из них самые лучшие? Чьи инженеры поднимутся на пьедестал почета? Пришло, наконец, время со всей прямотой ответить на этот вопрос.
Читать дальше →

Ракетные «сосиски» и «сардельки» или проклятие неуниверсальности

Reading time5 min
Views28K

Сверхтяжелые ракеты-носители времен лунной гонки прекрасны. «Сатурн-V» выглядит настолько рациональным и инженерно красивым, что можно понять происхождение аргумента сторонников «лунного заговора» — кажется, что такая замечательная ракета должна была бы летать до сегодняшнего дня. Но проблема сверхтяжелых ракет состоит в том, что они непригодны для обычных космических задач, для которых требуется меньшая грузоподъемность. Говоря простым языком, у вас есть грузовик «Урал», на котором вы пару раз в год возите удобрения, кирпичи или доски на дачу. Будете ли вы на нем каждый день ездить на работу в офис? Теоретически это возможно, но очень нерационально — мощный двигатель «ест» десятки литров солярки на сотню километров, не говоря уже о сопутствующих расходах или проблемах с парковкой. С космосом то же самое — «тяжелыми» стали называться ракеты грузоподъемностью двадцать тонн на низкую околоземную орбиту, а «сверхтяжелой» сейчас называют ракету с грузоподъемностью больше 50 тонн на НОО. Но не нужно думать, что изобретательное человечество легко отказалось от мечты получить универсальную ракету, которой можно каждый месяц запускать небольшие спутники, но один-два раза в год отправиться на Луну или дальше.
Читать дальше →

Как опереться на пустоту?

Reading time9 min
Views66K

«Дайте мне точку опоры, и я переверну Землю» — так, по легенде, сказал Архимед, научно объяснив интуитивно понимаемый принцип работы рычага. Но в космическом вакууме опоры нет. А спутникам нужно, чтобы солнечные батареи смотрели на Солнце, антенны — на Землю, камера — на интересный участок Марса, а двигатель для коррекции орбиты — строго в определенную точку пространства. Приходится что-то придумывать, чтобы опереться на пустоту.
Читать дальше →

Как не заблудиться в космосе?

Reading time9 min
Views56K


Римский философ Сенека сказал: «Если человек не знает, куда он плывет, то для него нет попутного ветра». В самом деле, какая нам польза от двигателей, маховиков или соленоидов, если мы не знаем положения аппарата в пространстве? Этот рассказ о приборах, которые позволяют нам не заблудиться в космосе.
Читать дальше →

Советская орбитальная хитрость

Reading time7 min
Views68K


История космонавтики, как и любой другой отрасли, хранит примеры остроумных решений, когда желаемая цель достигалась красивым и неожиданным способом. СССР/России не повезло с доступностью геостационарной орбиты. Но вместо того, чтобы достать до нее более тяжелыми ракетами или пытаться снизить массу полезной нагрузки, разработчиков осенила идея использования специальной орбиты. Об этой орбите и спутниках, которые ее используют до сих пор, наш сегодняшний рассказ.
Читать дальше →

Системы слежения за полетом ракеты

Reading time4 min
Views29K

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

32 березовые палки или системы зажигания ракетного двигателя

Reading time6 min
Views86K

Сейчас, в двадцать первом веке, есть космические ракеты, для запуска которых используются детали из дерева. Тридцать две березовые палки являются важным элементом системы запуска двигателей. И если страну-производитель таких ракет вы, наверняка, угадали (да, это Россия, а ракеты — семейство «Союз»), то от презрительного отношения к такому инженерному решению я бы вас предостерег — это будет серьезной ошибкой. Почему?
Читать дальше →

Математика на пальцах: мендосинский двигатель и теорема Ирншоу

Reading time9 min
Views117K

Постановка задачи


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

Вот на этом видео крайне подробно описан (на русском языке) принцип работы:



Но ещё больше самого двигателя мне показалась любопытной следующая вещь. В описании этого видео Дмитрий Коржевский написал следующую вещь: «Боковую опору заменить магнитом НЕВОЗМОЖНО!!! Не задавайте больше этот вопрос!»

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

Information

Rating
7,462-nd
Registered
Activity