Pull to refresh
28
0
Алексей @Priest512

Java-разработчик

Send message

Windows: Sleep(0.5)

Reading time12 min
Views33K
Как, наверняка, многие знают, в WinAPI'шную функцию Sleep передаётся число миллисекунд, на сколько мы хотим уснуть. Поэтому минимум, что мы можем запросить — это уснуть на 1 миллисекунду. Но что если мы хотим спать ещё меньше? Для интересующихся, как это сделать в картинках, добро пожаловать, под кат.
Читать дальше →
Total votes 55: ↑48 and ↓7+41
Comments65

Lock-free структуры данных. 1 — Начало

Reading time12 min
Views148K

Я надеюсь, что эта статья станет началом цикла заметок о lock-free структурах данных. Я хочу поделиться с хабрасообществом своим опытом, наблюдениям и размышлениями о том, что такое lock-free структуры данных, как их реализовывать, подходят ли концепции контейнеров стандартной библиотеки STL к lock-free контейнерам, и когда стоит (и стоит ли вообще) применять lock-free структуры данных.

Читать дальше →
Total votes 165: ↑161 and ↓4+157
Comments39

Lock-free структуры данных. Основы: Атомарность и атомарные примитивы

Reading time15 min
Views108K

Построение lock-free структур данных зиждется на двух китах – атомарных операциях и способах упорядочения доступа к памяти. В этой статье речь пойдет об атомарности и атомарных примитивах.

Анонс. Спасибо за теплый прием Начал! Вижу, что тема lock-free интересна хабрасообществу, это меня радует. Я планировал построить цикл по академическому принципу, плавно переходя от основ к алгоритмам, попутно иллюстрируя текст кодом из libcds. Но часть читателей требует зрелищ не мешкая показать, как пользоваться библиотекой, особо не рассусоливая. Я согласен, в этом есть свой резон. В конечном счете, и мне не так интересно, что там внутри boost, — опишите, как его применять! Поэтому свой эпический цикл я разделю на три части: Основы, Внутри и Извне. Каждая статья эпопеи будет относится к одной из частей. В Основах будет рассказываться о низкоуровневых вещах, вплоть до строения современных процессоров; это часть для почемучек вроде меня. Внутри будет освещать интересные алгоритмы и подходы в мире lock-free, — это скорее теория о том, как реализовать lock-free структуру данных, libcds будет неисчерпаемым источником C++ кода. В Извне будут статьи о практике применения libcds, — программные решения, советы и FAQ. Извне будет питаться вашими вопросами/замечаниями/предложениями, дорогие хабражители.

А пока я судорожно готовлю начало Извне, — первая часть Основ. Статья во многом не о C++ (хотя и о нем тоже) и даже не о lock-free (хотя без atomic lock-free алгоритмы неработоспособны), а о реализации атомарных примитивов в современных процессорах и о базовых проблемах, возникающих при использовании таких примитивов.
Атомарность — это первый круг ада низкий уровень из двух.
Читать дальше →
Total votes 119: ↑116 and ↓3+113
Comments37

Berkeley Unified Parallel C (UPC). Установка в среде Windows и Linux

Reading time8 min
Views4K
image Unified Parallel C (UPC) — это расширение языка C, разработанное для высокопроизводительных вычислений на крупномасштабных параллельных машинах. Язык представляет единую программную модель для систем с общей и разделенной памятью. Количество параллелизма фиксируется на старте программы, обычно с одним потоком на ядро процессора.

» Официальный сайт UPC
» Официальный сайт Berkeley UPC

В своё время возникли определенные трудности с разворачиванием UPC и отсутствием каких-либо подсказок по первым шагам ни в русскоязычном, ни в англоязычном сегменте интернета, кроме официальной инструкции INSTALL.TXT, которую пришлось переваривать.

Чтобы сей опыт не пропал даром, я решил написать статью по установке UPC в различных средах.
Читать дальше →
Total votes 19: ↑18 and ↓1+17
Comments2

JSR 133 (Java Memory Model) FAQ (перевод)

Reading time25 min
Views148K
Добрый день.
В рамках набора на курс «Multicore programming in Java» я делаю серию переводов классических статей по многопоточности в Java. Всякое изучение многопоточности должно начинаться с введения в модель памяти Java (New JMM), основным источником от авторов модели является «The Java Memory Model» home page, где для старта предлагается ознакомится с JSR 133 (Java Memory Model) FAQ. Вот с перевода этой статьи я и решил начать серию.
Я позволил себе несколько вставок «от себя», которые, по моему мнению, проясняют ситуацию.
Я являюсь специалистом по Java и многопоточности, а не филологом или переводчиком, посему допускаю определенные вольности или переформулировки при переводе. В случае, если Вы предложите лучший вариант — с удовольствием сделаю правку.
Этот статья также подходит в качестве учебного материала к лекции «Лекция #5.2: JMM (volatile, final, synchronized)».

Также я веду курс «Scala for Java Developers» на платформе для онлайн-образования udemy.com (аналог Coursera/EdX).

Ну и да, приходите учиться ко мне!


JSR 133 (Java Memory Model) FAQ


Jeremy Manson и Brian Goetz, февраль 2004

Содержание:
Что такое модель памяти, в конце концов?
Другие языки, такие как C++, имеют модель памяти?
Что такое JSR 133?
Что подразумевается под «переупорядочением» (reordering)?
Что было не так со старой моделью памяти?
Что вы подразумеваете под «некорректно синхронизированы»?
Что делает синхронизация?
Как может случиться, что финальная поля меняют значения?
How do final fields work under the new JMM?
Что делает volatile?
Решила ли новая модель памяти «double-checked locking» проблему?
Что если я пишу виртуальную машину?
Почему я должен беспокоиться?
Читать дальше →
Total votes 56: ↑51 and ↓5+46
Comments32

Думаешь, ты знаешь Си?

Reading time4 min
Views53K
image

Многие программисты утверждают, что знают С. Ну что ж, у него самый известный синтаксис, он существует уже 44 года и он не захламлен непонятными функциями. Он прост!

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

Если вы думаете что он прост — пройдите этот тест. В нем всего 5 вопросов. Каждый вопрос в принципе одинаковый: какое будет значение возврата?
Total votes 60: ↑44 and ↓16+28
Comments270

Декомпиляция Java-методов на продуктивном приложении под нагрузкой – миф или реальность?

Reading time3 min
Views5.4K
Тестирование, несомненно, является одним из китов, на которых стоит разработка приложений. Как и любой характерный кит, тестирование может зафонтанировать багами и долго не останавливаться. Но главный вопрос заключается в достаточности тестового покрытия – все ли баги по написанным тест-кейсам удастся отловить? Возможно, некоторые появятся только под пользовательской нагрузкой. Для выявления оных, как правило, детонирует обращение пользователя и далее задействуется следующая цепная реакция: специалист Help Desk, вторая линия поддержки и, если повезет, сообщение о нештатной работе попадет в руки разработчика. Да, инцидент может также прийти от системы APM-мониторинга (если она у вас есть, конечно). Но все эти вещи не позволят однозначно определить, какие значения принимали переменные до возникновения исключения. В посте мы как раз поговорим о решении, призванном в помогать в подобных ситуациях.


Собрать монстров в узелок
Total votes 15: ↑11 and ↓4+7
Comments4

О том как я написал блокировщик рекламы и трекеров для смартфонов Samsung на Android. Adhell

Reading time6 min
Views28K
Представляю сообществу проект, которым занимался в последнее время: блокировщик рекламы и трекеров для смартфонов Samsung на Android с открытым исходным кодом.

Реклама блокируется на уровне устройства, то есть не только в стандартном браузере, но и во всех остальных приложениях (например, в Chrome и YouTube).

Предыстория


Я пользуюсь блокировщиками на всех своих компьютерах, но все чаще захожу в интернет со смартфона.

Мне нравится мобильный Chrome больше чем Mozilla или Opera, но в Chrome нет поддержки расширений, а присутствие рекламы на смартфоне критичнее чем на десктопе, так как часто ограничен трафик и дисплей в несколько раз меньше.

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

Исходя из таких предпосылок я занялся поиском решения блокировки рекламы на смартфоне.


Пример работы приложения на Samsung Galaxy Tab 4 10.1. habr.ru
Читать дальше →
Total votes 41: ↑38 and ↓3+35
Comments112

Лямбды и анонимные классы: кто больше жрёт

Reading time7 min
Views50K

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

Читать дальше →
Total votes 74: ↑69 and ↓5+64
Comments35

Пять шагов по оптимизации производительности приложения для Андроид

Reading time6 min
Views31K
В этой небольшой статье я хочу поделиться с вами опытом, как программно оптимизировать производительность приложения Андроид за 5 простых шагов на примере создания цифровой версии игры «Корона Эмбера».

До создания серьезных приложения со сложной структурой View и Layout'ов мы особо не задумывались над тем, как простые и логичные действия в стиле «смотрите, я набросал дизайн из лэйаутов» могут серьезно замедлить работу всей программы.

Помимо прочего, задача с «Короной Эмбера» осложнялась еще и тем, что игра, которую мы задумали перенести на Андроид платформу, была сама по себе достаточно насыщенной различными компонентами, которые как-то надо было умещать на игровом поле или рядом с ним.

В статье я собрал наш успешный опыт и облёк его в удобную и читабельную форму, полезную для тех, кто все еще гуглит «как программно оптимизировать приложение под Андроид» или «почему мое приложение лагает».
Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments14

Ускорьте Ваше приложение. PERFMATTERS!.

Reading time20 min
Views20K

Мои правила


Каждый раз, когда у меня возникает проблема в производительности, я следую этим правилам:
  • Всегда измеряйте — оптимизация с помощью глаз плохая идея. Когда вы просмотрели ту же анимацию несколько раз, вам кажется, что она выполняется быстрее. Цифры не врут. Используйте инструменты, о которых я расскажу, и измеряйте поведение вашего приложения несколько раз до и после того как делаете изменения.
  • Используйте медленные устройства — Если вы хотите найти все слабые места, вам больше помогут медленные устройства. Новые и производительные устройства не будут показывать ваши возможные проблемы производительности и не у всех ваших пользователей есть топ устройства.
  • Компромиссы — Оптимизация производительности всецело состоит из компромиссов. Вы оптимизируете одно в обмен на другое. Во многих случаях этот другой компромисс может быть потраченным временем на нахождение и исправление производительности, также он может быть качеством ваших растровых изображений или количеством данных которые вы должны хранить в определенной структуре данных. Приготовьтесь жертвовать чем-либо.

Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments0

Как в Java выстрелить себе в ногу из лямбды и не промахнуться

Reading time9 min
Views33K
Иногда можно услышать такие разговоры: никаких принципиальных изменений в Java 8 не произошло и лямбды это старые добрые анонимные классы щедро посыпанные синтаксическим сахаром. Как бы не так! Предлагаю сегодня поговорить, в чём отличие лямбд от анонимных классов. И почему попасть себе в ногу стало всё-таки сложнее.
Читать дальше →
Total votes 51: ↑48 and ↓3+45
Comments40

ASP.NET Core: Создание первого веб-API с использованием ASP.NET Core MVC и Visual Studio

Reading time8 min
Views111K
Протокол HTTP может использоваться не только для веб-страниц. Это еще и мощная платформа для создания API, предоставляющих сервисы и данные. Протокол HTTP прост, гибок и широко распространен. Практически любая существующая платформа имеет библиотеку HTTP, поэтому службы HTTP доступны в большом числе клиентов, включая браузеры, мобильные устройства и традиционные офисные приложения.

В новой статье из серии ASP.NET Core будет описано создание простого веб-API для работы со списком дел.


Читать дальше →
Total votes 26: ↑23 and ↓3+20
Comments24

Анатомия KD-Деревьев

Reading time14 min
Views50K
image

Эта статья полностью посвящена KD-Деревьям: я описываю тонкости построения KD-Деревьев, тонкости реализации функций поиска 'ближнего' в KD-Дереве, а также возможные 'подводные камни', которые возникают в процессе решения тех или иных подзадач алгоритма. Дабы не запутывать читателя терминологией(плоскость, гипер-плоскость и т.п), да и вообще для удобства, полагается что основное действо разворачивается в трехмерном пространстве. Однако же, где нужно я отмечаю, что мы работаем в пространстве другой размерности. По моему мнению статья будет полезна как программистам, так и всем тем, кто заинтересован в изучении алгоритмов: кто-то найдет для себя что-то новое, а кто-то просто повторит материал и возможно, в комментариях дополнит статью. В любом случае, прошу всех под кат.
Читать дальше →
Total votes 32: ↑32 and ↓0+32
Comments11

ASP.NET Core: Пример реализации шаблонов проектирования Единица работы и Репозиторий

Reading time8 min
Views32K
В этой статье мы поговорим о шаблонах проектирования «Единица работы» и «Репозиторий» в контексте тестового веб-приложения на ASP.NET Core (с использованием встроенного DI), которое мы с вами вместе и разработаем. В результате мы получим две реализации взаимодействия с хранилищем: настоящую, на основе базы данных SQLite, и фейковую, для быстрого тестирования, на основе перечисления в памяти. Переключение между этими двумя реализациями будет выполняться изменением одной строчки кода.


Читать дальше →
Total votes 25: ↑19 and ↓6+13
Comments58

Анонс .NET Standard 2.0

Reading time2 min
Views40K

Не так давно в сети появился пост Immo Landwerth, который рассказывает о .NET Standard 2.0
Если вкратце, то это унификация .NET для следующих веток .NET Framework, .NET Core и Xamarin. Выражаясь понятными словами это набор API, который будет реализован всеми платформами.

И сразу значительное изменение: .NET Standard заменит библиотеки PCL. Хотя для разработчиков суть и останется прежняя, реализация будет другой. Ездить машина будет, как и раньше, но изменится название и содержимое под капотом (пожалуй, в лучшую сторону).
Читать дальше →
Total votes 51: ↑40 and ↓11+29
Comments24

Оптимизация кода: память

Reading time12 min
Views93K
Большинство программистов представляют вычислительную систему как процессор, который выполняет инструкции, и память, которая хранит инструкции и данные для процессора. В этой простой модели память представляется линейным массивом байтов и процессор может обратиться к любому месту в памяти за константное время. Хотя это эффективная модель для большинства ситуаций, она не отражает того, как в действительности работают современные системы.

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

image

Иерархия памяти работает, потому что хорошо написанные программы имеют тенденцию обращаться к хранилищу на каком-то конкретном уровне более часто, чем к хранилищу на более низком уровне. Так что хранилище на более низком уровне может быть медленнее, больше и дешевле. В итоге мы получаем большой объём памяти, который имеет стоимость хранилища в самом низу иерархии, но доставляет данные программе со скоростью быстрого хранилища в самом верху иерархии.
Читать дальше →
Total votes 80: ↑78 and ↓2+76
Comments99

Почему вам не следует использовать финализаторы

Reading time5 min
Views18K
Не так давно мы работали над диагностикой, связанной с проверкой финализатора, и у нас с коллегой возник спор по поводу деталей работы сборщика мусора и финализации объектов. И хотя я и он занимаемся разработкой на C# более 5 лет, к общему мнению мы не пришли, и я решил изучить этот вопрос подробнее.


Читать дальше →
Total votes 43: ↑34 and ↓9+25
Comments56

Self-contained дистрибуция .NET Core приложений

Reading time3 min
Views30K

Если вы вдруг пропустили, то .NET теперь open source, а .NET Core это бесплатный, open source, кроссплатформенный фреймворк, который вы можете скачать и запустить за время <10 минут. Вы можете получить его на Mac, Windows и на пол-дюжине Unix-ов с сайта dot.net Попробуйте его вместе с бесплатной, кроссплатформенной Visual Studio Code и вы будете писать на C# и F# всегда и везде.
Читать дальше →
Total votes 44: ↑42 and ↓2+40
Comments19

Пол Грэм: Что надо делать в вузе, чтобы стать хорошим хакером

Reading time12 min
Views29K


Пол Грэм, Undergraduation, март 2005
(Разделы этого эссе начали свою жизнь как ответы студентам, писавшим мне с вопросами.)

В последнее время до меня по e-mail внезапно начали домогаться младшекурсники: немного отступила, видимо, эйфория от поступления и вдруг появился вопрос: а что тут делать-то? Я, возможно, не лучший источник советов по поводу формального IT-образования, учитывая, что основным моим направлением была философия; впрочем, я посещал так много занятий по Computer Science, что тамошний народ считал меня своим. Уж хакером-то я точно был.
Читать дальше →
Total votes 19: ↑19 and ↓0+19
Comments9

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity