LoveRead.info » Книги » Разная литература » Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен

Книгу Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читаем онлайн бесплатно полную версию! Чтобы начать читать не надо регистрации. Напомним, что читать онлайн вы можете не только на компьютере, но и на андроид (Android), iPhone и iPad. Приятного чтения!

178 0 18:04, 26-08-2023
Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен
26 август 2023

Книга Язык программирования C#9 и платформа .NET5 - Эндрю Троелсен читать онлайн бесплатно без регистрации

В 10-м издании книги описаны новейшие возможности языка C# 9 и .NET 5 вместе с подробным "закулисным" обсуждением, призванным расширить навыки критического мышления разработчиков, когда речь идет об их ремесле. Книга охватывает ASP.NET Core, Entity Framework Core и многое другое наряду с последними обновлениями унифицированной платформы .NET, начиная с улучшений показателей производительности настольных приложений Windows в .NET 5 и обновления инструментария XAML и заканчивая расширенным рассмотрением файлов данных и способов обработки данных. Все примеры кода были переписаны с учетом возможностей последнего выпуска C# 9.

    1 ... 185 186 187 188 189 190 191 192 193 ... 407
    Перейти на страницу:
    эффективности пул потоков удерживает созданные (но неактивные) потоки до тех пор, пока они не понадобятся. Для взаимодействия с этим пулом ожидающих потоков в пространстве имен System.Threading предлагается класс ThreadPool.

    Чтобы запросить поток из пула для обработки вызова метода, можно использовать метод ThreadPool.QueueUserWorkItem(). Он имеет перегруженную версию, которая позволяет в дополнение к экземпляру делегата WaitCallback указывать необязательный параметр System.Object для передачи специальных данных состояния:

    public static class ThreadPool

    {

      ...

      public static bool QueueUserWorkItem(WaitCallback callBack);

      public static bool QueueUserWorkItem(WaitCallback callBack,

                                          object state);

    }

    Делегат WaitCallback может указывать на любой метод, который принимает в качестве единственного параметра экземпляр System.Object (представляющий необязательные данные состояния) и ничего не возвращает. Обратите внимание, что если при вызове QueueUserWorkItem() не задается экземпляр System.Object, то среда .NET Core Runtime автоматически передает значение null. Чтобы продемонстрировать работу методов очередей, работающих с пулом потоков .NET Core Runtime, рассмотрим еще раз программу (в проекте консольного приложения по имени ThreadPoolApp), в которой применяется тип Printer. На этот раз массив объектов Thread не создается вручную, а метод PrintNumbers() будет назначаться членам пула потоков:

    using System;

    using System.Threading;

    using ThreadPoolApp;

    Console.WriteLine("***** Fun with the .NET Core Runtime Thread Pool *****n");

    Console.WriteLine("Main thread started. ThreadID = {0}",

      Thread.CurrentThread.ManagedThreadId);

    Printer p = new Printer();

    WaitCallback workItem = new WaitCallback(PrintTheNumbers);

    // Поставить в очередь метод десять раз.

    for (int i = 0; i < 10; i++)

    {

      ThreadPool.QueueUserWorkItem(workItem, p);

    }

    Console.WriteLine("All tasks queued");

    Console.ReadLine();

    static void PrintTheNumbers(object state)

    {

      Printer task = (Printer)state;

      task.PrintNumbers();

    }

    У вас может возникнуть вопрос: почему взаимодействовать с пулом потоков, поддерживаемым средой .NET Core Runtime, выгоднее по сравнению с явным созданием объектов Thread? Использование пула потоков обеспечивает следующие преимущества.

    • Пул потоков эффективно управляет потоками, сводя к минимуму количество потоков, которые должны создаваться, запускаться и останавливаться.

    • За счет применения пула потоков можно сосредоточиться на решении задачи, а не на потоковой инфраструктуре приложения.

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

    • Когда требуются потоки переднего плана или должен устанавливаться приоритет потока. Потоки из пула всегда являются фоновыми и обладают стандартным приоритетом (ThreadPriority.Normal).

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

    На этом исследование пространства имен System.Threading завершено. Несомненно, понимание вопросов, рассмотренных в настоящей главе до сих пор (особенно в разделе, посвященном проблемам параллелизма), будет чрезвычайно ценным при создании многопоточного приложения. А теперь, опираясь на имеющийся фундамент, мы переключим внимание на несколько новых аспектов, связанных с потоками, которые появились в .NET 4.0 и остались в .NET Core. Для начала мы обратимся к альтернативной потоковой модели под названием TPL.

    Параллельное программирование с использованием TPL

    Вы уже ознакомились с объектами из пространства имен System.Threading, которые позволяют строить многопоточное программное обеспечение. Начиная с версии .NET 4.0, в Microsoft ввели новый подход к разработке многопоточных приложений, предусматривающий применение библиотеки параллельного программирования, которая называется TPL. С помощью типов из System.Threading.Tasks можно строить мелкомодульный масштабируемый параллельный код без необходимости напрямую иметь дело с потоками или пулом потоков.

    Однако речь не идет о том, что вы не будете использовать типы из пространства имен System.Threading во время применения TPL. Оба инструментальных набора для создания многопоточных приложений могут вполне естественно работать вместе. Сказанное особенно верно в связи с тем, что пространство имен System.Threading по-прежнему предоставляет большинство примитивов синхронизации, которые рассматривались ранее (Monitor, Interlocked и т.д.). В итоге вы на самом деле обнаружите, что иметь дело с библиотекой TPL предпочтительнее, чем с первоначальным пространством имен System.Threading, т.к. те же самые задачи могут решаться гораздо проще. 

    Пространство имен System.Threading.Tasks

    Все вместе типы из пространства System.Threading.Tasks называются библиотекой параллельных задач (Task Parallel Library — TPL). Библиотека TPL будет автоматически распределять нагрузку приложения между доступными процессорами в динамическом режиме с применением пула потоков исполняющей среды. Библиотека TPL поддерживает разбиение работы на части, планирование потоков, управление состоянием и другие низкоуровневые детали. В конечном итоге появляется возможность максимизировать производительность приложений .NET Core, не сталкиваясь со сложностями прямой работы с потоками.

    Роль класса Parallel

    Основным классом в TPL является System.Threading.Tasks.Parallel. Он содержит методы, которые позволяют осуществлять итерацию по коллекции данных (точнее по объекту, реализующему интерфейс IEnumerable<T>) в параллельной манере. Это делается главным образом посредством двух статических методов Parallel.For() и Parallel.ForEach(), каждый из которых имеет множество перегруженных версий.

    Упомянутые методы позволяют создавать тело из операторов кода, которое будет выполняться в параллельном режиме. Концептуально такие операторы представляют логику того же рода, которая была бы написана в нормальной циклической конструкции (с использованием ключевых слов for и foreach языка С#). Преимущество заключается в том, что класс Parallel будет самостоятельно извлекать потоки из пула потоков (и управлять параллелизмом).

    Оба метода требуют передачи совместимого с IEnumerable или IEnumerable<T> контейнера, который хранит данные, подлежащие обработке в параллельном режиме. Контейнер может быть простым массивом, необобщенной коллекцией (вроде ArrayList), обобщенной коллекцией (наподобие List<T>) или результатами запроса LINQ.

    Вдобавок понадобится применять делегаты System.Func<T> и System.Action<T> для указания целевого метода, который будет вызываться при обработке данных. Делегат Func<T> уже встречался в главе 13 во время исследования технологии LINQ to Objects. Вспомните, что Func<T> представляет метод, который возвращает значение и принимает различное количество аргументов. Делегат Action<T> похож на Func<T> в том, что позволяет задавать метод, принимающий несколько параметров, но данный метод должен возвращать void.

    Хотя можно было бы вызывать методы Parallel.For() и Parallel.ForEach() и передавать им строго типизированный объект делегата Func<T> или Action<T>, задача программирования упрощается за счет использования подходящих анонимных методов или лямбда-выражений С#.

    Обеспечение параллелизма данных с помощью класса Parallel

    Первое применение библиотеки TPL связано с

    1 ... 185 186 187 188 189 190 191 192 193 ... 407
    Перейти на страницу:
    1. Жалоба
    Отзывы - 0

    Прочитали книгу? Предлагаем вам поделится своим отзывом от прочитанного(прослушанного)! Ваш отзыв будет полезен читателям, которые еще только собираются познакомиться с произведением.


    Уважаемые читатели, слушатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

    • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
    • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
    • 3. Просьба отказаться от нецензурной лексики.
    • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

    Надеемся на Ваше понимание и благоразумие. С уважением, администратор LoveRead.info.


    Установить VPN и читай слушай бесплатно

    Новые отзывы

    1. Борис Борис14 июнь 00:50 Колокола в России тем и отличались от западных что раскачиаали именно язык колокола,а не сам колокол! Авторы что-жертвы ЕГЭ? Не... Соединенные Штаты России 3 - Полина Ром
    2. Людмила Хофман Людмила Хофман10 июнь 22:13 У меня перевернулся мир после прочтения ваших книг! Так приятно и чисто на душе, ведь по сути неважно кто с кем , а только любовь... Долгая игра - Рейчел Рид
    3. Анна Анна08 июнь 11:28 Спасибо за новую историю жизни и любви на сайте,прочитала с удовольствием .... Давай поженимся - Юлия Резник
    Все комметарии
    Новинки бесплатной онлайн библиотеки