Заинтересовал меня топик о многопоточности в Go: habrahabr.ru/post/195574/.
Внимательно перечитал автора и комментарии сообщества и решил, что тема все же раскрыта не полностью.
В дальнейшем, дабы не было непонимания, попрошу принять, что здесь и далее термин «поток» используется исключительно в значении «thread», а не в значении «stream». Спасибо.
Читать полностью »
Метка «threads»
Go: многопоточность
2013-09-30 в 22:17, admin, рубрики: benchmark, golang, threads, метки: benchmark, golang, threadsПишем простой ThreadPool с async и future
2013-07-29 в 18:04, admin, рубрики: asynchronous, c++, threads, Программирование, с++11, метки: asynchronous, threads, Программирование, с++11 Доброе время суток! Я занимаюсь разработкой MMORPG. В игре асинхронной загрузкой файлов занимается файловая система встроенная в движок, остальная логика обрабатывалась в основном потоке. Но помимо загрузки файлов есть и другие тяжеловесные операции, например инициализация персонажа, которая включает в себя распарсивание XML данных, композиция текстур и т.д. И я столкнулся с необходимостью разгрузить основной поток игры для повышения fps.
Вооружившись гуглом и прочитав несколько последних статей на Хабре о потоках, решил попробовать свои силы и написать свой велосипед ThreadPool. Основной моей целью было написать простой в использовании и расширяемый пул потоков, с возможностью асинхронного вызова функций с любым количеством аргументов и получения возвращаемого значения. Предлагаемые на Хабре решения меня не устроили в силу многих проблем, от которых я постарался избавиться в своем решении – использовать минимум шаблонной магии и отказаться от абстрактных классов и наследования. Я хочу поделиться своим опытом с вами.
Одним махом 100 миллионов убивахом. Или lock-free распределитель памяти
2013-06-10 в 5:41, admin, рубрики: atomic, c++, c++11, lock-free, threads, параллельное программирование, Программирование, метки: atomic, c++11, lock-free, threadsПостановка задачи
Один из алгоритмов, который я реализовывал, имел интересные особенности при работе с памятью:
- Могло выделяться огромное количество, до десятков и сотен миллионов небольших объектов одного типа.
- Объекты представляли собой POD- типы.
PODA Plain Old Data Structure in C++ is an aggregate class that contains only PODS as members, has no user-defined destructor, no user-defined copy assignment operator, and no nonstatic members of pointer-to-member type.
- Заранее было неизвестно какое количество объектов понадобится, могло так случится, что потребуется сотня, а может и сто миллионов.
- Объекты никогда не удаляются по одному, в какой-то момент они становятся не нужны все сразу.
- Алгоритм хорошо распараллеливается, по этому выделением объектов занимается одновременно несколько потоков, по количеству ядер процессора(ов).
Использование в таких условиях стандартного new – delete приводит к очень большим потерям времени на удаление объектов. Если без отладчика удаление происходило хотя бы за несколько секунд, то в присутствии отладчика освобождение памяти замедляется примерно в 100(!) раз, и отладка проекта становится просто невозможной. Кроме того из-за большого количества выделенных объектов достаточно ощутимым становился перерасход памяти на внутренние данные расперделителя памяти.
Для решения задачи выделения огромного количества объектов одного типа, и их пакетного удаления, был сделан lock-free контейнер MassAllocator. Код компилируется Visual Studio 2012. Полный код проекта выложен на github.
Читать полностью »
Потоки, блокировки и условные переменные в C++11 [Часть 2]
2013-06-08 в 18:41, admin, рубрики: c++, c++11, condition variables, deadlocks, locks, Mutex, threads, windows, блокировки, взаимоблокировки, все равно никто не читает метки, мьютекс, потоки, Программирование, условные переменные, метки: c++, c++11, condition variables, deadlocks, locks, mutex, threads, блокировки, взаимоблокировки, все равно никто не читает метки, мьютекс, потоки, условные переменные Для более полного понимания этой статьи, рекомендуется прочитать ее первую часть, где основное внимание было уделено потокам и блокировкам, в ней объяснено много моментов (терминов, функций и т.д.), которые без пояснения будут использованы здесь.
В данной статье будут рассмотрены условные переменные… Читать полностью »
Потоки, блокировки и условные переменные в C++11 [Часть 1]
2013-06-08 в 15:01, admin, рубрики: c++, c++11, condition variables, deadlocks, locks, Mutex, threads, windows, блокировки, взаимоблокировки, все равно никто не читает метки, мьютекс, потоки, Программирование, условные переменные, метки: c++, c++11, condition variables, deadlocks, locks, mutex, threads, блокировки, взаимоблокировки, все равно никто не читает метки, мьютекс, потоки, условные переменныеВ первой части этой статьи основное внимание будет уделено потокам и блокировкам в С++11, условные переменные во всей своей красе будут подробно рассмотрены во второй части… Читать полностью »
Преобразование асинхронных методов в синхронные с возвращением результата в Java
2013-06-01 в 9:32, admin, рубрики: concurrency, java, threads, Песочница, Программирование, метки: concurrency, java, threadsВ данной статье я бы хотел обсудить с уважаемым сообществом методы синхронизации потоков в Java. Чтобы не увязать в теории, попробуем рассмотреть синхронизацию потоков в задаче преобразования асинхронных методов в синхронные.
Дано
- JavaSE 6+
- библиотека с асинхронным методом
void A.asyncMethod(Callback callback);
- метод, который нужно переопределить, и вернуть из него результат
@Override
Object overridenMethod() {
return syncMethod();
}
Задача
Преобразовать асинхронный вызов метода в синхронный с возвращением результата.
Какой Java поток нагружает мой процессор
2012-10-02 в 9:07, admin, рубрики: java, threads, переводы, метки: java, threads Что Вы делаете, когда Ваше Java приложение потребляет 100% ЦП? Оказывается Вы легко можете найти проблемные потоки, используя встроенные Unix и JDK утилиты. Никакие инструменты профилирования не потребуются.
С целью тестирования мы будем использовать простую программу:
Читать полностью »
Потоки в OS X: как получить CPU usage всех потоков в чужой программе?
2012-09-25 в 9:53, admin, рубрики: console, mac os x, OS X, security, threads, разработка, метки: c++, console, mac os x, OS X, security, threadsДобрый день, уважаемыее-маководы!
В [Mac] OS X имеется замечательный встроенный инструмент — Activity Monitor, который легко покажет занимаемую процессом память и процессорное время. Что ж, это очень хорошо, но иногда хочется странного. Например, посмотреть, сколько у процесса потоков (threads) и сколько CPU кушает каждый из них. Тут уже Activity Monitor нам никак не может помочь, увы, а файловой системы procfs
здесь бывалый линуксоид не найдёт. Придётся решать эту проблему своими силами.
Сегодня я поведаю вам о том, как написать маленькую консольную программку, которая будет на вход принимать PID процесса и на выходе давать информацию о CPU usage каждого потока этой программы (а так же общий usage).
Писать будем на чистом C, у нас будет всего один файл исходников, и я решил не использовать Xcode для такого мелкого проекта, пусть будет обычный Makefile.
Читать полностью »
Ruby NoName Podcast S04E17
2012-09-05 в 15:09, admin, рубрики: bundler, dci, debug, eventmachine, gitlab, goliath, GUI, mobile, profile, rails, ruby, rubygems, thin, threads, websockets, zeus, подкасты, метки: bundler, dci, debug, eventmachine, gitlab, goliath, gui, mobile, profile, rails, rubygems, thin, threads, websockets, zeusПодкаст
http://ruby.rpod.ru/283342.html
Новости
- Thin v2
- Множества в Ruby от Avdi Grimm
- Refinements в Trunk
- Зевс ускоряет рельсы
- Голиаф стал взрослым — вышла версия 1.0.0
- Refinements и DCI
- Tic-tac-toe with EM and websocket
- Generating Thread-Dumps for Ruby Scripts
- Stack tracy and video
- Dan Watsons Coding Zen
- Polish your gems
- DJ Mon – веб мордочка для DelayedJob
- Разработка гемов с помощью bundler
Немного о многопоточном программировании. Часть 1. Синхронизация зло или все-таки нет
2012-09-04 в 0:30, admin, рубрики: lock-free, multithreading, Mutex, threads, потоки, Программирование, Серверная оптимизация, синхронизация, системное программирование, метки: lock-free, multithreading, mutex, threads, потоки, синхронизация Мне по работе часто приходится сталкиваться с высоконагруженными многопоточными или многопроцессными сервисами (application-, web-, index-server).
Достаточно интересная, но иногда неблагодарная работа — оптимизировать все это хозяйство.
Растущие потребности клиентов часто упираются в невозможность просто заменить железную составляющую системы на более современную, т.к. производительность компьютеров, скорость чтения-записи жестких дисков и сети растут много медленнее запросов клиентов.
Редко помогает увеличение количества нодов кластера (система как правило распределенная).
Чаще приходится запустив профайлер, искать узкие места, лезть в source code и править ляпы, которые оставили коллеги, а иногда и сам, чего греха таить, много лет назад.
Некоторые из проблем, связаных с синхронизацией, я попытаюсь изложить здесь. Это не будет вводный курс по многопоточному программированию — предпологается, что читатель знаком с понятием thread и context switch, и знает для чего нужны mutex, semaphore и т.д.
Читать полностью »