43,19 €
Over 70 recipes to get you writing powerful and efficient multithreaded, asynchronous, and parallel programs in C# 6.0
This book is aimed at those who are new to multithreaded programming, and who are looking for a quick and easy way to get started. It is assumed that you have some experience in C# and .NET already, and you should also be familiar with basic computer science terminology and basic algorithms and data structures.
Multi-core processors are synonymous with computing speed and power in today's world, which is why multithreading has become a key concern for C# developers. Multithreaded code helps you create effective, scalable, and responsive applications.
This is an easy-to-follow guide that will show you difficult programming problems in context. You will learn how to solve them with practical, hands-on, recipes. With these recipes, you'll be able to start creating your own scalable and reliable multithreaded applications. Starting from learning what a thread is, we guide you through the basics and then move on to more advanced concepts such as task parallel libraries, C# asynchronous functions, and much more.
Rewritten to the latest C# specification, C# 6, and updated with new and modern recipes to help you make the most of the hardware you have available, this book will help you push the boundaries of what you thought possible in C#.
This is an easy-to-follow guide full of hands-on examples of real-world multithreading tasks. Each topic is explained and placed in context, and for the more inquisitive, there are also more in-depth details of the concepts used.
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 276
Veröffentlichungsjahr: 2016
Copyright © 2016 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.
First published: November 2013
Second Edition: April 2016
Production reference: 1150416
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-78588-125-1
www.packtpub.com
Author
Eugene Agafonov
Reviewers
Chad McCallum
Philip Pierce
Commissioning Editor
Edward Gordon
Acquisition Editor
Kirk D'Costa
Content Development Editor
Nikhil Borkar
Technical Editor
Vivek Pala
Copy Editor
Neha Vyas
Project Coordinator
Francina Pinto
Proofreader
Safis Editing
Indexer
Rekha Nair
Production Coordinator
Manu Joseph
Cover Work
Manu Joseph
Eugene Agafonov leads the development department at ABBYY and lives in Moscow. He has over 15 years of professional experience in software development, and he started working with C# when it was in beta version. He is a Microsoft MVP in ASP.NET since 2006, and he often speaks at local software development conferences, such as DevCon Russia, about cutting-edge technologies in modern web and server-side application development. His main professional interests are cloud-based software architecture, scalability, and reliability. Eugene is a huge fan of football and plays the guitar with a local rock band. You can reach him at his personal blog, eugeneagafonov.com, or find him on Twitter at @eugene_agafonov.
ABBYY is a global leader in the development of document recognition, content capture, and language-based technologies and solutions that are integrated across the entire information life cycle.
He is the author of Multhreading in C# 5.0 Cookbook and Mastering C# Concurrency by Packt Publishing.
I'd like to dedicate this book to my dearly beloved wife, Helen, and son, Nikita.
Chad McCallum is a Saskatchewan computer geek with a passion for software development. He has over 10 years of .NET experience (and 2 years of PHP, but we won't talk about that). After graduating from SIAST Kelsey Campus, he picked up freelance PHP contracting work until he could pester iQmetrix to give him a job, which he's hung onto for the last 10 years. He's come back to his roots in Regina and started HackREGINA, a local hackathon organization aimed at strengthening the developer community while coding and drinking beer. His current focus is mastering the art of multitenant e-commerce with .NET. Between his obsession with board gaming and random app ideas, he tries to learn a new technology every week. You can see the results at www.rtigger.com.
Philip Pierce is a software developer with 20 years of experience in mobile, web, desktop, and server development, database design and management, and game development. His background includes creating A.I. for games and business software, converting AAA games between various platforms, developing multithreaded applications, and creating patented client/server communication technologies.
Philip has won several hackathons, including Best Mobile App at the AT&T Developer Summit 2013, and a runner up for Best Windows 8 App at PayPal's Battlethon Miami. His most recent project was converting Rail Rush and Temple Run 2 from the Android platform to Arcade platforms.
Philip's portfolios can be found at the following websites:
Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at <[email protected]> for more details.
At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.
https://www2.packtpub.com/books/subscription/packtlib
Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can search, access, and read Packt's entire library of books.
Not so long ago, a typical personal computer CPU had only one computing core, and the power consumption was enough to cook fried eggs on it. In 2005, Intel introduced its first multiple-core CPU, and since then, computers started developing in a different direction. Low-power consumption and a number of computing cores became more important than a row computing core performance. This lead to programming paradigm changes as well. Now, we need to learn how to use all CPU cores effectively to achieve the best performance, and at the same time, we need to save battery power by running only the programs that we need at a particular time. Besides that, we need to program server applications in a way to use multiple CPU cores or even multiple computers as efficiently as possible to support as many users as we can.
To be able to create such applications, you have to learn to use multiple CPU cores in your programs effectively. If you use the Microsoft .NET development platform and C#, this book will be a perfect starting point for you to program fast and responsive applications.
The purpose of this book is to provide you with a step-by-step guide for multithreading and parallel programming in C#. We will start with the basic concepts, going through more and more advanced topics based on the information from previous chapters, and we will end with real-world parallel programming patterns, Universal Windows applications, and cross-platform applications samples.
Chapter 1, Threading Basics, introduces the basic operations with threads in C#. It explains what a thread is, the pros and cons of using threads, and other important thread aspects.
Chapter 2, Thread Synchronization, describes thread interaction details. You will learn why we need to coordinate threads together and the different ways of organizing thread coordination.
Chapter 3, Using a Thread Pool, explains the thread pool concept. It shows how to use a thread pool, how to work with asynchronous operations, and the good and bad practices of using a thread pool.
Chapter 4, Using the Task Parallel Library, is a deep dive into the Task Parallel Library (TPL) framework. This chapter outlines every important aspect of TPL, including task combination, exception management, and operation cancelation.
Chapter 5, Using C# 6.0, explains in detail the recently introduced C# feature—asynchronous methods. You will find out what the async and await keywords mean, how to use them in different scenarios, and how await works under the hood.
Chapter 6, Using Concurrent Collections, describes the standard data structures for parallel algorithms included in .NET Framework. It goes through sample programming scenarios for each data structure.
Chapter 7, Using PLINQ, is a deep dive into the Parallel LINQ infrastructure. The chapter describes task and data parallelism, parallelizing a LINQ query, tweaking parallelism options, partitioning a query, and aggregating the parallel query result.
Chapter 8, Reactive Extensions, explains how and when to use the Reactive Extensions framework. You will learn how to compose events and how to perform a LINQ query against an event sequence.
Chapter 9, Using Asynchronous I/O, covers in detail the asynchronous I/O process, including files, networks, and database scenarios.
Chapter 10, Parallel Programming Patterns, outlines the solutions to common parallel programming problems.
Chapter 11, There's More, covers the aspects of programming asynchronous applications for Windows 10, OS X, and Linux. You will learn how to work with Windows 10 asynchronous APIs and how to perform the background work in Universal Windows applications. Also, you will get familiar with cross-platform .NET development tools and components.
For most of the recipes, you will need Microsoft Visual Studio Community 2015. The recipes in Chapter 11, There's more, for OS X and Linux will optionally require the Visual Studio Code editor. However, you can use any specific editor you are familiar with.
This book is written for existing C# developers with little or no background in multithreading and asynchronous and parallel programming. The book covers these topics from basic concepts to complicated programming patterns and algorithms using the C# and .NET ecosystem.
In this book, you will find a number of styles of text that distinguish between different kinds of information. Here are some examples of these styles, and an explanation of their meaning.
Code words in text are shown as follows: "When the program is run, it creates a thread that will execute a code in the PrintNumbersWithDelay method."
A block of code is set as follows:
Any command-line input or output is written as follows:
New terms and important words are shown in bold. Words that you see on the screen, in menus or dialog boxes for example, appear in the text like this: "Right-click on the References folder in the project, and select the Manage NuGet Packages… menu option".
Warnings or important notes appear in a box like this.
Tips and tricks appear like this.
Feedback from our readers is always welcome. Let us know what you think about this book—what you liked or may have disliked. Reader feedback is important for us to develop titles that you really get the most out of.
To send us general feedback, simply send an e-mail to <[email protected]>, and mention the book title via the subject of your message.
If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, see our author guide on www.packtpub.com/authors.
Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase.
You can download the example code files for this book from your account at http://www.packtpub.com. If you purchased this book elsewhere, you can visit http://www.packtpub.com/support and register to have the files e-mailed directly to you.
You can download the code files by following these steps:
Once the file is downloaded, please make sure that you unzip or extract the folder using the latest version of:
Although we have taken every care to ensure the accuracy of our content, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in the text or the code—we would be grateful if you would report this to us. By doing so, you can save other readers from frustration and help us improve subsequent versions of this book. If you find any errata, please report them by visiting http://www.packtpub.com/submit-errata, selecting your book, clicking on the erratasubmissionform link, and entering the details of your errata. Once your errata are verified, your submission will be accepted and the errata will be uploaded on our website, or added to any list of existing errata, under the Errata section of that title. Any existing errata can be viewed by selecting your title from http://www.packtpub.com/support.
Piracy of copyright material on the Internet is an ongoing problem across all media. At Packt, we take the protection of our copyright and licenses very seriously. If you come across any illegal copies of our works, in any form, on the Internet, please provide us with the location address or website name immediately so that we can pursue a remedy.
Please contact us at <[email protected]> with a link to the suspected pirated material.
We appreciate your help in protecting our authors, and our ability to bring you valuable content.
You can contact us at <[email protected]> if you are having a problem with any aspect of the book, and we will do our best to address it.
In this chapter, we will cover the basic tasks to work with threads in C#. You will learn the following recipes:
At some point of time in the past, the common computer had only one computing unit and could not execute several computing tasks simultaneously. However, operating systems could already work with multiple programs simultaneously, implementing the concept of multitasking. To prevent the possibility of one program taking control of the CPU forever, causing other applications and the operating system itself to hang, the operating systems had to split a physical computing unit across a few virtualized processors in some way and give a certain amount of computing power to each executing program. Moreover, an operating system must always have priority access to the CPU and should be able to prioritize CPU access to different programs. A thread is an implementation of this concept. It could be considered as a virtual processor that is given to the one specific program and runs it independently.
Remember that a thread consumes a significant amount of operating system resources. Trying to share one physical processor across many threads will lead to a situation where an operating system is busy just managing threads instead of running programs.
Therefore, while it was possible to enhance computer processors, making them execute more and more commands per second, working with threads was usually an operating system task. There was no sense in trying to compute some tasks in parallel on a single-core CPU because it would take more time than running those computations sequentially. However, when processors started to have more computing cores, older programs could not take advantage of this because they just used one processor core.
To use a modern processor's computing power effectively, it is very important to be able to compose a program in a way that it can use more than one computing core, which leads to organizing it as several threads that communicate and synchronize with each other.
The recipes in this chapter focus on performing some very basic operations with threads in the C# language. We will cover a thread's life cycle, which includes creating, suspending, making a thread wait, and aborting a thread, and then, we will go through the basic synchronization techniques.
