Download - Алексей Николаенков, Devexperts
Бутылочное горлышко
многопоточных программ
Кто виноват? Что делать?
Алексей Николаенков
18.04.2013 1
18.04.2013 2
«Ситуация с таможенным досмотром отправлений
остается сложной. В целом 41 таможенник (против
384 сотрудников Почты) в четырех основных
международных местах почтового обмена России (...)
в сутки может досмотреть менее 33 тонн, в то время
как, только на аэропорты московского узла за
минувшие сутки прибыло почти 39 тонн почты.
Распределяй не распределяй, ежедневно
недосмотренные таможней 6 тонн оседает
в терминалах».
«ПОЧТОВЫЕ ЗАВАЛЫ ТАЮТ под стахановским напором почтовиков»
15.04.2013 ФГУП «Почта России». Орфография и пунктуация авторские.
Обработка запросов
18.04.2013 3
Обработка
Выполнение
Обработка
Обработка
Выполнение
Запрос
Запрос
Запрос
Результат
Результат
Действующие лица
18.04.2013 4
Источник: telegraph.co.uk
Producer
Источник: telegraph.co.uk
Consumer
Взаимодействие потоков
18.04.2013 5
Взаимодействие потоков
18.04.2013 6
Взаимодействие потоков
18.04.2013 7
Взаимодействие потоков
• Образуется задержка
• Последовательный доступ нужен?
18.04.2013 8
Пример
18.04.2013 9
Producer Consumer
Lock
Заблокировать
Lock
Пример
18.04.2013 10
Producer Consumer
Lock
Заблокировать
Lock
Результаты
18.04.2013 11
Общее количество операций 120 миллионов
Результаты
18.04.2013 12
Общее количество операций 250 миллионов
Результаты
18.04.2013 13
Общее количество операций 250 миллионов
Результаты
18.04.2013 14
0
50
100
150
200
250
300
0,00%
10,00%
20,00%
30,00%
40,00%
50,00%
60,00%
70,00%
80,00%
90,00%
100,00%
2 4 6 8 16 20 1000
Ожидание( %)
Операции (млн)
Закон Амдала
• 𝑃 – часть работы, который может выполняться
параллельно
• 𝑁 – количество «исполнителей»
18.04.2013 15
S(𝑁) =1
1 − 𝑃 + 𝑃𝑁
Закон Амдала
18.04.2013 16
Закон Амдала: выводы
C ростом числа «исполнителей»:
• постоянный рост ускорения не
обеспечивается;
• увеличиваются накладные расходы;
18.04.2013 17
S(𝑁) =1
1 − 𝑃 + 𝑃𝑁
Поэкспериментируем?
• ArrayBlockingQueue
• LinkedBlockingQueue
• ConcurrentLinkedQueue
18.04.2013 18
Платформа предоставляет стандартную
реализацию – ArrayBlockingQueue
• «Обычный» ограниченный буфер на основе
массива
• При конструировании указывается размер
буфера, который не меняется
• Предусмотрено два индекса на выбор и
вставку элементов
• Для управления многопоточностью
используется одна общая блокировка
Ограниченный буфер
Платформа предоставляет стандартную
реализацию – LinkedBlockingQueue
• Обычный односвязный список
• Две «блокировки»: на вставку и на выбор
• В большинстве случаев необходимо брать
только одну из блокировок (обе требуют такие
операции как remove и contains. Take/offer-
работают независимо)
Неограниченный буфер
Платформа предоставляет стандартную
реализацию – ConcurrentLinkedQueue
• Неблокирующая
• Основана на CAS
Неограниченный буфер #2
18.04.2013 22
Мы создаем сложные,
высоконагруженные системы
для финансовой сферы.
Devexperts
18.04.2013 23
Наша команда – это 300 профессионалов в области программирования,
тестирования и поддержки ПО
Офисы разработки расположены в Санкт-Петербурге и Ростове-на-Дону!
Офисы
- свободный график работы
- своя столовая
- комфортные рабочие места
- корпоративные мероприятия
- командировки по всему миру
- курсы английского языка
- неполная занятость и поддержка
в написании научных работ
Отличные условия работы!
Если Вам захотелось присоединиться к команде Devexperts,
пишите и звоните нам:
Тел.: (812) 438-16-26
E-mail: [email protected]
Вакансии: hh.ru и itmozg.ru.
Наши новости: devexperts.com и ВКонтакте.
Контакты
Спасибо за внимание!
18.04.2013 28
бНОПНЯШ?
18.04.2013 29