Você está na página 1de 30

Scalable Development, Inc.

Building systems today that perform tomorrow.

Overview of Threading
with the .NET Framework

Wallace B. McClure

Scalable Development, Inc.


.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

 Dividingan 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

 .NETCLR
LocksAndThreads

 Trackthe 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

 Instantiatea 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

 Onlyworks 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 Thread
Recommendations
 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.
Overview of the Thread Pool
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.
 Rememberthat 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.
Scalable Development, Inc.

Questions?
Building systems today that perform tomorrow.

 Scalable Development, Inc.


 Consulting & Development Services.
 http://www.scalabledevelopment.com
 865-693-3004.
 wallym@scalabledevelopment.com

END

Você também pode gostar