Title: Overview of Threading with the .NET Framework
1Overview of Threadingwith the .NET Framework
Scalable Development, Inc. Building systems today
that perform tomorrow.
- Wallace B. McClure
- Scalable Development, Inc.
2.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
3What 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.
4What is Threading?
- Threading is the ability of a single application
(process) to perform multiple units of work that
are controlled by the parent application.
5Algorithms 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.
6Serial Processes
- Serial. One step within the algorithm must be
completed before the next step.
7Parallel Processes
- Parallel. Steps within the algorithm are not
dependent on other steps to be completed first.
8Algorithms
- 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?
9Types 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).
10Types of Threads
- Managed Threads / Regular Threads.
- System.Threading.Thread() Class.
- ThreadPool.
- System.Threading.ThreadPool() Class.
11Create 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.
12Priority
- Normal is the default.
- Threading priority tells the OS how much relative
time to a thread.
13Performance Monitor Integration
- .NET CLR LocksAndThreads
- Track the number of Threads.
14Uniprocessor 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().
15Example 1
- Create a thread and send a message to the UI.
16Passing 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.
17Example 2
- Instantiate a class.
- Set a property of the class.
- Thread runs.
- Raises event.
- Event is processed by the calling thread.
18Problem(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.
19Locking Access to Objects (Synchronization)
- System.Threading.Monitor() Class.
- Methods
- Enter(obj).
- Exit(obj).
- Wait, Pulse, PulseAll.
20Other 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.
21Example 3
- Use the Monitor object to lock access to an
object.
22Notes 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.
23Managed 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.
24Overview of the Thread Pool
25ThreadPool
- 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.
26Of Interest
- WaitCallback.
- QueueUserWorkItem.
- Monitor the pool.
- GetAvailableThreads(out int Wthrds, out int
iCompPortThrds). - GetMaxThreads(out int Wthrds,out int
iCompPortThrds).
27ThreadPool Worries
- Don't do operations that are not guaranteed to
complete. - Remember that the ThreadPool has a maximum number
of threads.
28Personal ExperienceOverview 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.
29Things to Look at / Last Thoughts
- Windows Services.
- EventLog.
- Weak References.
- Performance Monitor Integration.
- Nothing wrong with Interop, if it will work for
you.
30Questions?
Scalable Development, Inc. Building systems today
that perform tomorrow.
- Scalable Development, Inc.
- Consulting Development Services.
- http//www.scalabledevelopment.com
- 865-693-3004.
- wallym_at_scalabledevelopment.com
END