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

Preview:

DESCRIPTION

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

Citation preview

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

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

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

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

18.04.2013 1

18.04.2013 2

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

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

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

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

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

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

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

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

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

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

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

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

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

18.04.2013 3

Обработка

Выполнение

Обработка

Обработка

Выполнение

Запрос

Запрос

Запрос

Результат

Результат

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

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: job@devexperts.com

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

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

Контакты

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

18.04.2013 28

бНОПНЯШ?

18.04.2013 29