1 / 39

How to Build Multi-threaded Applications in .NET Mazen S. Alzogbi Technology Specialist Microsoft Corporation

How to Build Multi-threaded Applications in .NET Mazen S. Alzogbi Technology Specialist Microsoft Corporation. What we will cover. The purpose of building multi-threading applications When multi-threading should be used, the pros and cons for multi-threaded applications

andrew
Download Presentation

How to Build Multi-threaded Applications in .NET Mazen S. Alzogbi Technology Specialist Microsoft Corporation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. How to Build Multi-threaded Applications in .NET Mazen S. Alzogbi Technology SpecialistMicrosoft Corporation

  2. What we will cover • The purpose of building multi-threading applications • When multi-threading should be used, the pros and cons for multi-threaded applications • The various multi-threading implementations, the pros and cons for each. • How .NET simplifies building multi-threaded applications

  3. Session Prerequisites • Component-Based or Object-Oriented Development • At least one of: • Microsoft® C# • VB.NET • Visual C++® • Overview knowledge of the .NET Framework • MTS, COM, DCOM, COM+ Level 300

  4. Agenda • Multi-threading in .NET • Synchronization • Inter-thread communication • Improving Performance with Thread Pools

  5. Simplify coding Perceived performance Performance Multi-threading in .NETWhy use threads?

  6. Multi-threading in .NETWhen Should You Use Threads? • Take advantage of multi-processor systems for intensive computation • Separate threads for different tasks • Keeping the user interface "live" • Waiting for I/O • Split out complex test conditionsand loops • Creating servers • Local and network

  7. Multi-threading in .NETThreading Issues • If threads are so good, why not use them everywhere? • Contention for shared resources • Need to co-operate to avoid corruption • Writing is more of a problem than reading

  8. Multi-threading in .NETThreading on the Windows® Platform • Win32 threads available from C/C++ • COM threads and apartments • Single Threaded Apartment (STA) • Developer does not worry about threads • Limitation on performance • Multi-Threaded Apartment (MTA) • Create thread-aware components • Marshal interface pointers across apartments

  9. Multi-threading in .NET.NET Simplifies Threading Choices • Common access from all language variants using System.Threading; ... ThreadStart ts = new ThreadStart(myMethod); Thread p1 = new Thread(ts); p1.Name = "MyThread"; P1.Start(); public void myMethod() { // Do some work ... }

  10. Multi-threading in .NETUsing Threads • Threads started by application • Pass in parameters as properties on target object • Threads stop when method is exited • Thread object cannot be re-used • Can stop thread with Abort method • Distinguish between thread and object

  11. Consumer object and thread Producer object and thread Work queue Completed queue Multi-threading in .NETSimple Sample Application in C# Work units are arrays of integers Completed queue holds sorted workunits

  12. Demonstration 1Multi-threaded application in C#Tour of ApplicationRunning the Application

  13. Agenda • Multi-threading in .NET • Synchronization • Inter-thread communication • Improving Performance with Thread Pools

  14. SynchronizationFrom STA to MTA • Developer must consider threading issues • Multiple threads contend for resources • Instance variables • Database connections • GUI controls • Writing is more of a problem than reading • Identify critical regions that access resources • Some more critical than others

  15. SynchronizationManaging Contention • Protect critical regions with synchronization • Objects have a lock that can be obtained • Only one thread can own the lock at one time • Other threads can block and wait… • … or test the lock and take alternative action • Very important to release locks • Deadlock and "liveness problems" can ensue

  16. SynchronizationUsing a lock Block SyncLock In VB.NET • Example: lock block in C# Object whose lock is obtained lock (this) { workQueue[nextFreeElement] = unit; nextFreeElement++; } } Criticalcode Lock released at end of block

  17. Demonstration 2Adding SynchronizationAdding Basic Synchronization

  18. SynchronizationObtaining Locks with Monitors • Example: Monitor usage in C# Monitor.Enter(this); workQueue[nextFreeElement] = unit; nextFreeElement++; Monitor.Exit(this); } Criticalcode Must remember to explicitly release the lock

  19. Demonstration 3Using MonitorsUsing Monitors

  20. SynchronizationChoosing a Synchronization Method • Things to consider • Complexity • Ability to split locks • Specialized mechanisms, e.g. ReaderWriterLock

  21. Agenda • Multi-threading in .NET • Synchronization • Inter-thread Communication • Improving Performance with Thread Pools

  22. Inter-thread CommunicationWhen Threads Need to Talk • Waiting for a shared resource to become free • Notification of the arrival of some work • Producer and consumer model • Waiting for clients • Network server model • Generally important application events • For example: A long-running task has finished

  23. Inter-thread CommunicationThread lifecycle • Waiting and ready queues • States Suspended Running Unstarted Aborted WaitSleepJoin

  24. Inter-thread CommunicationSimple communication with Wait/Pulse • Monitor.Wait() • Supply object to wait on • Enter WaitSleepJoin • Timed waits • Monitor.Pulse() and Monitor.PulseAll() • Choice between them • Can only call them when you have the lock • Wait() call gives up the lock until it resumes • What happens when Pulse() is called before Wait()?

  25. Inter-thread CommunicationNotification Alternatives • Pausing/sleeping • Events (incl. ManualResetEvent) • Timers (server and windows) • Interlocked increment and decrement

  26. Consumer object and thread Pulse Add workunit Add workunit Queue full- Wait Carry on Removework unit Inter-thread Communication Wait/Pulse in Sample Application Producer object and thread Work queue

  27. Demonstration 4Notification Between ThreadsWaiting for an Event

  28. Inter-thread CommunicationManipulating other threads • Finding threads • Thread information • ThreadState • IsAlive • Joining another thread • Thread.Join()

  29. Inter-thread CommunicationTerminating threads • Stopping a thread • Interrupt + InterruptedException • Abort • Abort and inconsistent state • As locks are released, who will clean up objects? • Alternative approaches using flags • Use join() to check if thread has exited yet

  30. Agenda • Multi-threading in .NET • Synchronization • Inter-thread communication • Improving Performance with Thread Pools

  31. Thread PoolsWhat are thread pools? • Set of "worker" threads • Thread controller assigns them to tasks • Submit task to thread controller • Number of threads in pool can grow or shrink • Thread controller can use common metrics • Developer does not have to worry about starting and terminating threads • Useful for optimizing thread usage where there are many clients or units of work

  32. Thread Pools.NET thread pools • One thread pool per-process • Pool is created when first work item is added • Developer has no control over number of threads created • Do NOT Abort pooled threads

  33. Thread PoolsQueuing work items • ThreadPool class • QueueUserWorkItem static method • Work item consists of • Method to run is defined by WaitCallback delegate (public void (object state)) • State to be passed as object • Still pass other state by setting variables on the method's object

  34. Thread PoolsCoding to work with thread pools • Still need all synchronization as before • Detection of when job is finished • Events work well in this environment • Use a .NET Event • Define a callback method • Register with event producer • Event producer then notifies all listeners

  35. Thread PoolsDelaying execution • Timed execution of delegates • Useful for timer events etc. • Use RegisterWaitForSingleObject

  36. Assign threadto delegate Queuework item Thread PoolsSample Application with thread pool Producer Consumer Thread pool

  37. Demonstration 5Using a Thread PoolChanging the Consumer Changing the ProducerEvaluating the Changes

  38. Session Summary • .NET has powerful, cross-language threading capabilities • .NET makes it easy to use multiple threads • Comprehensive library of classes and delegates • Benefits of multi-threading include • Simpler code • Faster execution • Improved user perception of performance • Developer must think more about thread interaction

  39. Thank You!

More Related