34
Часть 1. Архитектура 3 0

разработка серверов и серверных приложений лекция №2

Embed Size (px)

DESCRIPTION

Причины потерь процессорного времени при организации последовательности вычислений внутри потока: 1. Ожидание ответа на запрос (поток спит). 2. Выполнение дополнительных "лишних" действий. Как способ устранения этих потерь - паттерн Пул потоков. Анализ императивного и функционального подхода к борьбе с "жадными" операциями. Эволюция методов организации параллельных вычислений на основе пула потоков.

Citation preview

Page 1: разработка серверов и серверных приложений лекция №2

Часть 1. Архитектура 30

Page 2: разработка серверов и серверных приложений лекция №2

Глава 2. TM для потоков. 31

Page 3: разработка серверов и серверных приложений лекция №2

Вычисления в потоке 32

- полезная работа- потери времени

Page 4: разработка серверов и серверных приложений лекция №2

Два вида потерь времени 33

Page 5: разработка серверов и серверных приложений лекция №2

1. Поток ждет ответа 34

Page 6: разработка серверов и серверных приложений лекция №2

Эдгар Дейкстра, 1967

Задача о спящем парикмахере 35

Page 7: разработка серверов и серверных приложений лекция №2

Асинхронность

На время ожидания освободить поток, чтобы дать возможность выполнить другую задачу

Что делать? 36

Page 8: разработка серверов и серверных приложений лекция №2

Императивные языки

Vs

Функциональные языки

Жадные операции 37

Page 9: разработка серверов и серверных приложений лекция №2

Почему функциональные языки? 38

int c = 0;for(int i =0; ; ++i){

c += i;}

void print(int i, int *c){

*c += i ;print(i+1, c);

}

Page 10: разработка серверов и серверных приложений лекция №2

Что будет с эффективностью? 39

Что если, ожидание > 50 милисекунд?

Время отклика > 100 милисекунд?

Page 11: разработка серверов и серверных приложений лекция №2

Стайер vs спринтер 40

Page 12: разработка серверов и серверных приложений лекция №2

benchmarksgame.alioth.debian.org 41

Page 13: разработка серверов и серверных приложений лекция №2

benchmarksgame.alioth.debian.org 42

Page 14: разработка серверов и серверных приложений лекция №2

benchmarksgame.alioth.debian.org 43

Page 15: разработка серверов и серверных приложений лекция №2

benchmarksgame.alioth.debian.org 44

Page 16: разработка серверов и серверных приложений лекция №2

while(условие){//тело цикла

Здесь может быть код, который будет передавать эстафету в другой поток вычислений}

Императивность тоже может! 45

Page 17: разработка серверов и серверных приложений лекция №2

А как же эффективность? 46

Philipp Haler, Martin Odersky

Event-Based Programming Without Inversion Control

2006Scala, C# 5 (await)

Page 18: разработка серверов и серверных приложений лекция №2

static async Task SavePage(string file, string a){ using (var stream = File.AppendText(file)) { var html = await new WebClient().DownloadStringTaskAsync(a); await stream.WriteAsync(html); }}

Пример await на C# 47

Page 19: разработка серверов и серверных приложений лекция №2

2. Лишние действия 48

Page 20: разработка серверов и серверных приложений лекция №2

Делегирование

Передать выполнение задач в другой поток

Что делать? 49

Page 21: разработка серверов и серверных приложений лекция №2

Трудоемкость делегируемой задачи vs время на ее передачу

• Чем меньше размер делегируемой задачи, тем ниже КПД (закон Амдала)

• => Запуск потока по требованию – слишком дорогая операция

Ограничения делегирования 50

Page 22: разработка серверов и серверных приложений лекция №2

Количество потоков vs время на управление потоками

• Слишком большое число потоков приводит к потерям производительности

• При небольшом числе потоков количество текущих задач больше числа потоков => нужна очередь задач

Ограничения делегирования 51

Page 23: разработка серверов и серверных приложений лекция №2

Архитектура Fog cutter 52

Gul A. Agha, Karmani 2011

Распространенная архитектура для вычислительных агентов

Page 24: разработка серверов и серверных приложений лекция №2

1. Пул потоков

public static void Main() {ThreadPool.QueueUserWorkItem(

new WaitCallback(ThreadProc)); Thread.Sleep(1000);

} static void ThreadProc(Object stateInfo) { …}

Эволюция асинхронности 53

Page 25: разработка серверов и серверных приложений лекция №2

2. Асинхронные callback’s

public class MyClass {public IAsyncResult BeginSend(string host, int port, byte[] buffer, int offset, int size,

AsyncCallback asyncCallback, object state) {SendAsyncResult result = new SendAsyncResult( host, port, bufferБ offset, size,

asyncCallback, state, this /*owner*/, "send");result.Process();return result;

}public void EndSend(IAsyncResult result){

AsyncResultNoResult.End(result, this, "send");}}

Эволюция асинхронности 54

Page 26: разработка серверов и серверных приложений лекция №2

3. Оператор await

static async Task SavePage(string file, string a){ using (var stream = File.AppendText(file)) { var html = await new WebClient().DownloadStringTaskAsync(a); await stream.WriteAsync(html); }}

Эволюция асинхронности 55

Page 27: разработка серверов и серверных приложений лекция №2

4. Библиотеки для параллельных циклов и не только

foreach (var item in sourceCollection) { Process(item); } Parallel.ForEach(sourceCollection, item => Process(item));

Эволюция асинхронности 56

Page 28: разработка серверов и серверных приложений лекция №2

Встраивание конструкций в язык

?????par_foreach (var item in sourceCollection) { Process(item); }

Эволюция асинхронности 57

Page 29: разработка серверов и серверных приложений лекция №2

1. Пул потоков2. Асинхронные callback’s3. Оператор await4. Библиотеки для параллельного циклов и не только5. Встраивание конструкций в язык

Эволюция асинхронности 58

Page 30: разработка серверов и серверных приложений лекция №2

Пул потоков 59

Page 31: разработка серверов и серверных приложений лекция №2

http://www.regfordev.com/2010/12/thread-pool.html

Простой пул потоков 60

http://www.regfordev.com/2010/12/thread-pool.html

Page 32: разработка серверов и серверных приложений лекция №2

Пул потоков в .Net 4.0 61

Page 33: разработка серверов и серверных приложений лекция №2

Еще один пул потоков 62

Балансировщик Очереди потоков Потоки

Page 34: разработка серверов и серверных приложений лекция №2

Производитель-потребитель 63

http://alice.pnzgu.ru/~dvn/complex/gl5.htm