Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Lektsia_10VP

.pdf
Скачиваний:
4
Добавлен:
27.05.2015
Размер:
724.2 Кб
Скачать

Чтобы во время выполнения превратить дополнительный поток в фоновый, необходимо установить свойство:

thread1.IsBackground = true;

11

Распараллеливание.

Библиотеки Task Parallel Library (TPL) и Concurrency and Coordination Runtime (CCR).

Parallel LINQ (PLINQ).

Новые инструменты отладки и профилирования.

Структуры координации данных.

12

Многопоточность не означает распараллеливание!

13

Многопоточность и параллелизм увеличивают сложность приложения

Состояние гонок.

Взаимные блокировки.

Зависание потоков.

Трудность кодирования и отладки.

Интеграция в среду.

14

Код, который выиграет от параллельного выполнения, должен обладать следующими характеристиками:

1.Может быть разбит на самодостаточные единицы.

2.Не имеет зависимостей от общего разделяемого состояния.

Параллельные циклы

Parallel.For ()

Parallel.ForEach ()

15

Parallel.For()

1. Введите в Program.cs следующий код:

using System;

using System.Collections.Generic; using System.Diagnostics;

using System.Threading.Tasks; namespace HelloParallel

{

class Program

{

public static List<StockQuote> Stocks = new List<StockQuote>();

static void Main(string[] args)

{

double serialSeconds = 0; double parallelSeconds = 0; Stopwatch sw = new Stopwatch();

16

PopulateStockList();

sw = Stopwatch.StartNew(); RunInSerial();

serialSeconds = sw.Elapsed.TotalSeconds;

sw = Stopwatch.StartNew(); RunInParallel();

parallelSeconds = sw.Elapsed.TotalSeconds;

Console.WriteLine(

"Finished serial at {0} and took {1}", DateTime.Now, serialSeconds);

Console.WriteLine(

"Finished parallel at {0} and took {1}", DateTime.Now, parallelSeconds);

17

Console.ReadLine();

sw = Stopwatch.StartNew(); RunInParallel(2); Console.WriteLine(

"Finished parallel at {0} and took {1}", DateTime.Now, sw.Elapsed.TotalSeconds);

Console.ReadLine();

}

private static void PopulateStockList()

{

Stocks.Add(new StockQuote { ID = 1, Company = "Microsoft", Price = 5.34m });

Stocks.Add(new StockQuote { ID = 2, Company = "IBM", Price = 1.9m });

Stocks.Add(new StockQuote { ID = 3, Company = "Yahoo", Price = 2.34m });

Stocks.Add(new StockQuote { ID = 4, Company = "Google", Price = 1.54m });

18

Stocks.Add(new StockQuote { ID = 5, Company = "Altavista", Price = 4.74m });

Stocks.Add(new StockQuote { ID = 6, Company = "Ask", Price = 3.21m });

Stocks.Add(new StockQuote { ID = 7, Company = "Amazon", Price = 20.8m });

Stocks.Add(new StockQuote { ID = 8, Company = "HSBC", Price = 54.6m });

Stocks.Add(new StockQuote { ID = 9, Company = "Barclays", Price = 23.2m });

Stocks.Add(new StockQuote { ID = 10, Company = "Gilette", Price = 1.84m });

}

19

private static void RunInSerial()

{

for (int i = 0; i < Stocks.Count; i++)

{

Console.WriteLine(

"Serial processing stock: {0}", Stocks[i].Company); StockService.CallService(Stocks[i]); Console.WriteLine();

}

}

private static void RunInParallel()

{

Parallel.For(0, Stocks.Count, i =>

{

Console.WriteLine(

"Parallel processing stock: {0}", Stocks[i].Company); StockService.CallService(Stocks[i]); Console.WriteLine();

});

}

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]