Заметки о программировании, путешествиях, плёнке и разных интересностях
Обо мне  •  Список заметок

Позднее Ctrl + ↑

Parallel, Asynchronous, Multithreading programming

Многопоточное программирование

Код может выполнятся в разных потоках. Например основной UI поток и набор потоков для обработки данных. В данном случае нет гарантии что потоки будут работать параллельно. Обычно это зависит от процессора. Потоки «абстрагируют» от пользователя низкоуровневые детали и позволяют выполнять более чем одну работу «параллельно».

Параллельное программирование

Подразумевает что некоторая задача разбивается на несколько независимых подзадач, которые можно выполнить параллельно и потом объединить результаты.
Примером такой задачи может быть Parallel LINQ

IEnumerable<Data> yourData = GetYourData();
var result = yourData.AsParallel() // начинаем обрабатывать параллельно
  .Select(d => d.CalcAmount()) // Вычисляем параллельно
  .Where(amount => amount > 0)
  .ToArray(); // Возврвщаемся к синхронной модели

Асинхронное программирование

Мы запускаем какую-то задачу, но не ждем ответа, а продолжаем делать свою работу. А когда будет готов ответ — нас уведомят. Обычно такие операции бывают при работе с сетью, диском или любыми другими продолжительными задачами.

Пример на C#.
У нас есть продолжительная асинхронная задача, которая обращается к БД. С помощью конструкций async/await мы организовываем асинхронную работу. Пока БД готовит для нас ответ, поток, который обслуживал этот метод возвращается в пулл потоков и может тем временем выполнять полезную работу. Как только БД отдаст ответ, нашему методу снова выделяется поток и продолжается работа.

var asyncResult = await Database.GetAllUsers(); // длительная асинхронная операция
var activeUsers = asyncResult.Where(user => user.IsActive).ToList(); // работаем с результатом асинхронной операции

Еще один забавный но наглядный пример

Вам нужно выкопать во дворе бассейн.

  1. Вы взяли лопату и копаете. Это однопоточная работа
  2. Вы пригласили друга Васю и копаете вместе, периодически задевая друг-друга лопатами. Это многопоточная работа
  3. Пока вы копаете бассейн, Вася копает канаву под водопровод. Никто никому не мешает. Это распараллеливание
  4. Вы пригласили бригаду землекопов, а сами с Васей пошли пить пиво. Когда бригада все сделает, к вам придут за деньгами. Это асинхронная работа.

Количество лопат в хозяйстве — это количество ядер в системе

Ссылки

Параллелизм против многопоточности против асинхронного программирования: разъяснение
Cтатья об async/await в C#
Многопоточное vs асинхронное программирование (stackoverflow) 

Получить информацию по индексу в таблице

DECLARE @TableName varchar(255) = 'LeadInFolder'
DECLARE @TableIndexName varchar(255) = 'Icy1fjQeGXuR5svQcM20sAenE8U'

SELECT * FROM sys.dm_db_index_physical_stats(DB_ID(), OBJECT_ID(@TableName), NULL, NULL, NULL) ips
INNER JOIN sys.indexes i ON (ips.object_id = i.object_id) AND (ips.index_id = i.index_id)
WHERE i.name = @TableIndexName

Лучшее объяснения работы семафора

A semaphore is like a nightclub: it has a certain capacity, enforced by a bouncer. Once it’s full, no more people can enter, and a queue builds up outside. Then, for each person that leaves, one person enters from the head of the queue. The constructor requires a minimum of two arguments: the number of places currently available in the nightclub and the club’s total capacity.

Полезные SQL скрипты: неиспользуемые индексы

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

SELECT DatabaseName = DB_NAME(),
    TableName = OBJECT_NAME(s.[object_id]),
    IndexName = i.name,
    user_updates,
    system_updates,
    'alter index [' +OBJECT_SCHEMA_NAME(i.object_id, DB_ID())+ '].['+i.name+'] ON ['+OBJECT_NAME(s.[object_id])+'] DISABLE' as [Disable],
    'exec sp_rename ''['+OBJECT_SCHEMA_NAME(i.object_id, DB_ID())+'].['+OBJECT_NAME(s.[object_id])+'].['+i.name+']'',''disable_'+i.name+''',''INDEX''' as [Rename]
FROM sys.dm_db_index_usage_stats s
INNER JOIN sys.indexes i ON s.object_id = i.object_id and
                            s.index_id  = i.index_id
WHERE s.database_id = DB_ID() and
    OBJECTPROPERTY(s.[object_id], 'IsMsShipped') = 0 and
    s.user_seeks   = 0 and
    s.user_scans   = 0 and
    s.user_lookups = 0 and
    i.is_disabled  = 0 and
    i.is_unique = 0 and
    i.is_primary_key = 0 and
    i.type_desc <> 'HEAP'
order by user_updates + system_updates desc
 Нет комментариев    81   1 мес   mssql   sql

Годнота, часть 15

Создание виртуальных хостингов с помощью nginx
Сервис по поиску проектов на Github в разрезе технологий. Очень удобно когда изучаешь новый фреймворк и хочешь посмотреть живые примеры использования.
Как двигаться от 7 к 10. Стив Павлина

Для любителей пленочной фотографии

Daylight vs. Tungsten

Паблики в ВК

Телеграмм каналы

Kentmere 400

Это первая пленка, которую я проявил вручную. Как по мне имеет большое, но в тоже время, приятное зерно. Позже расскажу о том как я проявлял.

Ведение дневника в Telegram

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

Он покрывает все то что умеют другие приложения:

  1. Аудио и видео заметки
  2. Фотографии
  3. Файлы
  4. Геолокация.

Проекты

Склад

Середина 2019 года
Текущее состояние: закрыт
Склад — приложение, которое позволяет сохранять закладки и организовывать с помощью тегов. Делал в первую очередь для себя. Также данный проект служит для меня площадкой для тестирования новых технологических решений. Планирую в ближайшем будущем открыть исходный код на Github.

Технологии: ASP.NET Core MVC, Entity Framework Core, PostgreSQL, JavaScript, bash.
Ссылка на проект https://mybookmark.space

Сайт для школы Educational hub «ABC»

Середина 2018 года
Занимался полным циклом разработки (дизайн, верстка, серверная часть, организация CI/CD).

Технологии: ASP.NET Core, SQLite, Entity Framework Core, HTML/CSS, bash.
Ссылка на сайт: https://educationalhub-abc.com.ua

Windows server manager

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

Технологии: ASP.NET MVC 5

WebCars

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

  • Написал большую часть серверной логики.
  • Интеграция с IP телефонией.
  • Корпоративный блог
  • Личные кабинеты для СТО и администраторов

Технологии: ASP.NET MVC 5, Entity Framework, JavaScript, JQuery, HTML/CSS

Мои профессиональные скиллы

Основной стек технологий — .NET

  • ASP.NET: Core, MVC, WebAPI.
  • Тестирование: NUnit, MSTest.
  • ORM: Entity Framework, Linq to SQL, Dapper.
  • T-SQL
  • PowerShell
  • Планировщики задач: Quartz, FluentScheduller.
  • И многие другие фреймворки (Ninject, Autofac, AutoMapper, Polly)

Web технологии

  • HTML/CSS
  • JavaScript
  • Angular 6

Дополнительные навыки

  • Много работал с настройкой и отладкой CI/CD в частности Teamcity.
  • Умею оптимизировать запросы для MS SQL Server
  • SVN/Git

Подходы к разработке ПО

  • Design Patterns
  • Domain-Driven Design
  • SOLID
  • TDD

Опыт работы

Terrasoft
Сентябрь 2017 — Сейчас
Основные задачи связанны с разработкой CRM системы bpmonline. Кроме этого занимаюсь автоматизацией разных процессов внутри команды.

Участвую во внутренних проектах:

  1. bpmcli — cli для нашей системы, которая предлагает новые возможности для разработчиков.
  2. bpmonline bot — бот для разных мессенджеров для упрощения взаимодействия с системой.

Провел ряд обучений на темы:

  1. Что такое TeamCity и с чем его едят?
  2. Серия докладов об архитектуре высоконагруженных систем.
  3. XP практики.

White & Red Production
Декабрь 2016 — Сентябрь 2017
Занимался разработкой интернет аукциона по продаже автомобилей. Реализовал оплату, большую часть серверной логики, взаимодействие с IP телефонией, корпоративный блог, админ панель.

Резюме (CV)

— Русская версия PDF | Google Documents.
— English version PDF | Google Documents

 Нет комментариев    73   2 мес  
Ранее Ctrl + ↓