300 likes | 539 Views
Wallace B. McClure Scalable Development, Inc. Overview of Threading with the .NET Framework. Scalable Development, Inc. Building systems today that perform tomorrow. .NET Resources. ASP.NET – www.asp.net AspAdvice – www.aspadvice.com Windows Forms – www.windowsforms.net
E N D
Wallace B. McClure Scalable Development, Inc. Overview of Threadingwith the .NET Framework Scalable Development, Inc. Building systems today that perform tomorrow.
.NET Resources • ASP.NET – www.asp.net • AspAdvice – www.aspadvice.com • Windows Forms – www.windowsforms.net • Architecture – msdn.microsoft.com/architecture • .NET News – www.dotnetwire.com
What is MultiTasking /Multiprocessing? • Ability of multiple applications to work at the same time. • Cooperative multitasking. Windows 3.1 & Mac OS pre-X applications were responsible for passing control of processing to each other. One application can cause problems in the whole system by blocking other running apps. • Pre-emptive multitasking. Win32 & Mac OSX applications have processing capabilities granted to them by the OS. One application is less like to cause a problem. TimeSlice is given to the app.
What is Threading? • Threading is the ability of a single application (process) to perform multiple units of work that are controlled by the parent application.
Algorithms and Their Impact • Dividing an application into “threads” will not automatically make an application faster. • How an application runs will determine how well threading in an application will work. • Threading is not a magic “snake oil.”
Serial Processes • Serial. One step within the algorithm must be completed before the next step.
Parallel Processes • Parallel. Steps within the algorithm are not dependent on other steps to be completed first.
Algorithms • Algorithms are neither Serial or Parallel but some combination. • Assume an app that is 50% parallel. • Only improve by up to 25% by adding an additional thread. • Never double the speed. • Must understand your algorithm. • Where are your bottlenecks and your opportunities for improvement?
Types of Suitable Apps /Algorithms • Long running algorithms. • Highly Parallel algorithms (FFT is the best parallel algorithm I know of). • Responsive User Interface. • Async operations. • Windows Services (HTTP, Database).
Types of Threads • Managed Threads / Regular Threads. • System.Threading.Thread() Class. • ThreadPool. • System.Threading.ThreadPool() Class.
Create a Thread • New System.Threading.Thread (AddressOf(method)). • Some Methods: • Start(). Start processing on the Thread. • Sleep(). Wait X milliseconds. • Join(). Wait on a thread to finish. • Resume(). Start processing again. • Abort(). Quit the thread.
Priority • Normal is the default. • Threading priority tells the OS how much relative time to a thread.
Performance Monitor Integration • .NET CLR LocksAndThreads • Track the number of Threads.
Uniprocessor Threading Hiccup • On a uniprocessor, the thread does not get any processor time until the main thread yields. Call Thread.Sleep(0) for a thread to immediately start after calling the Thread.Start().
Example #1 • Create a thread and send a message to the UI.
Passing Parameters • In: Set a property of a class. • In: Use the constructor to set initial value. • Out: Raise an event and pass a param to that event.
Example #2 • Instantiate a class. • Set a property of the class. • Thread runs. • Raises event. • Event is processed by the calling thread.
Problem(s) • Debugging. • Management overhead. • Deadlocks. • Race Conditions. • Order of Execution. • What happens when Threads must access common variables? • Exclusively lock access to any common objects.
Locking Access to Objects (Synchronization) • System.Threading.Monitor() Class. • Methods: • Enter(obj). • Exit(obj). • Wait, Pulse, PulseAll.
Other Ways to Lock Objects • Synchronization Attribute. • Lock (C#) / SyncLock (VB). • ReaderWriterLock() Class. Designed for reads with a small number of writes. • Mutex. Works for threads and processes.
Example #3 • Use the Monitor object to lock access to an object.
Notes on the Monitor Object • Only works on Reference types. Value types are not exclusively locked. • The vbc and csc compilers put a try/catch/finally so that in the case of an error, the appropriate Exit() method is called.
Managed ThreadRecommendations • Don't use Thread.Abort to terminate threads. Thread state is unknown. • Don't use Thread.Suspend and .Resume to synchronize threads. Use the appropriate objects. • Monitor.Enter and Monitor.Exit are both called. • Threads are great for tasks involving different resources.
ThreadPool • Pool of threads. • Managed by the CLR. • Per Process. • Built into the CLR. • # of Threads dependent on CPU usage. 25 threads per CPU default. • Article on MSDN with ThreadPool guidelines.
Of Interest • WaitCallback. • QueueUserWorkItem. • Monitor the pool. • GetAvailableThreads(out int Wthrds, out int iCompPortThrds). • GetMaxThreads(out int Wthrds,out int iCompPortThrds).
ThreadPool Worries • Don't do operations that are not guaranteed to complete. • Remember that the ThreadPool has a maximum number of threads.
Personal Experience:Overview of a Windows Service • Goal: Pull data from multiple sources. • Multi-threaded Windows Service. • Thread for each data source. • Little contention for resources. • Error processing is complicated.
Things to Look at / Last Thoughts • Windows Services. • EventLog. • Weak References. • Performance Monitor Integration. • Nothing wrong with Interop, if it will work for you.
Questions? Scalable Development, Inc. Building systems today that perform tomorrow. • Scalable Development, Inc. • Consulting & Development Services. • http://www.scalabledevelopment.com • 865-693-3004. • wallym@scalabledevelopment.com END