29
Бутылочное горлышко многопоточных программ Кто виноват? Что делать? Алексей Николаенков 18.04.2013 1

Алексей Николаенков, Devexperts

Embed Size (px)

DESCRIPTION

«Бутылочное горлышко многопоточных программ – кто виноват, и что делать. Мастер-класс.» BitByte: 20 апреля 2013, Санкт-Петербург http://bitbyte.itmozg.ru/

Citation preview

Page 1: Алексей Николаенков, Devexperts

Бутылочное горлышко

многопоточных программ

Кто виноват? Что делать?

Алексей Николаенков

18.04.2013 1

Page 2: Алексей Николаенков, Devexperts

18.04.2013 2

«Ситуация с таможенным досмотром отправлений

остается сложной. В целом 41 таможенник (против

384 сотрудников Почты) в четырех основных

международных местах почтового обмена России (...)

в сутки может досмотреть менее 33 тонн, в то время

как, только на аэропорты московского узла за

минувшие сутки прибыло почти 39 тонн почты.

Распределяй не распределяй, ежедневно

недосмотренные таможней 6 тонн оседает

в терминалах».

«ПОЧТОВЫЕ ЗАВАЛЫ ТАЮТ под стахановским напором почтовиков»

15.04.2013 ФГУП «Почта России». Орфография и пунктуация авторские.

Page 3: Алексей Николаенков, Devexperts

Обработка запросов

18.04.2013 3

Обработка

Выполнение

Обработка

Обработка

Выполнение

Запрос

Запрос

Запрос

Результат

Результат

Page 5: Алексей Николаенков, Devexperts

Взаимодействие потоков

18.04.2013 5

Page 6: Алексей Николаенков, Devexperts

Взаимодействие потоков

18.04.2013 6

Page 7: Алексей Николаенков, Devexperts

Взаимодействие потоков

18.04.2013 7

Page 8: Алексей Николаенков, Devexperts

Взаимодействие потоков

• Образуется задержка

• Последовательный доступ нужен?

18.04.2013 8

Page 9: Алексей Николаенков, Devexperts

Пример

18.04.2013 9

Producer Consumer

Lock

Заблокировать

Lock

Page 10: Алексей Николаенков, Devexperts

Пример

18.04.2013 10

Producer Consumer

Lock

Заблокировать

Lock

Page 11: Алексей Николаенков, Devexperts

Результаты

18.04.2013 11

Общее количество операций 120 миллионов

Page 12: Алексей Николаенков, Devexperts

Результаты

18.04.2013 12

Общее количество операций 250 миллионов

Page 13: Алексей Николаенков, Devexperts

Результаты

18.04.2013 13

Общее количество операций 250 миллионов

Page 14: Алексей Николаенков, Devexperts

Результаты

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

Ожидание( %)

Операции (млн)

Page 15: Алексей Николаенков, Devexperts

Закон Амдала

• 𝑃 – часть работы, который может выполняться

параллельно

• 𝑁 – количество «исполнителей»

18.04.2013 15

S(𝑁) =1

1 − 𝑃 + 𝑃𝑁

Page 16: Алексей Николаенков, Devexperts

Закон Амдала

18.04.2013 16

Page 17: Алексей Николаенков, Devexperts

Закон Амдала: выводы

C ростом числа «исполнителей»:

• постоянный рост ускорения не

обеспечивается;

• увеличиваются накладные расходы;

18.04.2013 17

S(𝑁) =1

1 − 𝑃 + 𝑃𝑁

Page 18: Алексей Николаенков, Devexperts

Поэкспериментируем?

• ArrayBlockingQueue

• LinkedBlockingQueue

• ConcurrentLinkedQueue

18.04.2013 18

Page 19: Алексей Николаенков, Devexperts

Платформа предоставляет стандартную

реализацию – ArrayBlockingQueue

• «Обычный» ограниченный буфер на основе

массива

• При конструировании указывается размер

буфера, который не меняется

• Предусмотрено два индекса на выбор и

вставку элементов

• Для управления многопоточностью

используется одна общая блокировка

Ограниченный буфер

Page 20: Алексей Николаенков, Devexperts

Платформа предоставляет стандартную

реализацию – LinkedBlockingQueue

• Обычный односвязный список

• Две «блокировки»: на вставку и на выбор

• В большинстве случаев необходимо брать

только одну из блокировок (обе требуют такие

операции как remove и contains. Take/offer-

работают независимо)

Неограниченный буфер

Page 21: Алексей Николаенков, Devexperts

Платформа предоставляет стандартную

реализацию – ConcurrentLinkedQueue

• Неблокирующая

• Основана на CAS

Неограниченный буфер #2

Page 22: Алексей Николаенков, Devexperts

18.04.2013 22

Мы создаем сложные,

высоконагруженные системы

для финансовой сферы.

Page 23: Алексей Николаенков, Devexperts

Devexperts

18.04.2013 23

Page 24: Алексей Николаенков, Devexperts

Наша команда – это 300 профессионалов в области программирования,

тестирования и поддержки ПО

Page 25: Алексей Николаенков, Devexperts

Офисы разработки расположены в Санкт-Петербурге и Ростове-на-Дону!

Офисы

Page 26: Алексей Николаенков, Devexperts

- свободный график работы

- своя столовая

- комфортные рабочие места

- корпоративные мероприятия

- командировки по всему миру

- курсы английского языка

- неполная занятость и поддержка

в написании научных работ

Отличные условия работы!

Page 27: Алексей Николаенков, Devexperts

Если Вам захотелось присоединиться к команде Devexperts,

пишите и звоните нам:

Тел.: (812) 438-16-26

E-mail: [email protected]

Вакансии: hh.ru и itmozg.ru.

Наши новости: devexperts.com и ВКонтакте.

Контакты

Page 28: Алексей Николаенков, Devexperts

Спасибо за внимание!

18.04.2013 28

Page 29: Алексей Николаенков, Devexperts

бНОПНЯШ?

18.04.2013 29