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

Post on 18-Jun-2015

278 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

Что делать? 36

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

Vs

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

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

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

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

c += i;}

void print(int i, int *c){

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

}

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

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

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

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

benchmarksgame.alioth.debian.org 41

benchmarksgame.alioth.debian.org 42

benchmarksgame.alioth.debian.org 43

benchmarksgame.alioth.debian.org 44

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

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

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

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

Philipp Haler, Martin Odersky

Event-Based Programming Without Inversion Control

2006Scala, C# 5 (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); }}

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

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

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

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

Что делать? 49

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

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

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

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

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

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

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

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

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

Gul A. Agha, Karmani 2011

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

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

public static void Main() {ThreadPool.QueueUserWorkItem(

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

} static void ThreadProc(Object stateInfo) { …}

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

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

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

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

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

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

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

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

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

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

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

Пул потоков 59

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

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

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

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

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

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

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

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

top related