slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
How to Build Multi-threaded Applications in .NET Mazen S. Alzogbi Technology Specialist Microsoft Corporation PowerPoint Presentation
Download Presentation
How to Build Multi-threaded Applications in .NET Mazen S. Alzogbi Technology Specialist Microsoft Corporation

Loading in 2 Seconds...

play fullscreen
1 / 39

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


  • 221 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'How to Build Multi-threaded Applications in .NET Mazen S. Alzogbi Technology Specialist Microsoft Corporation' - andrew


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

How to Build Multi-threaded Applications in .NET

Mazen S. Alzogbi

Technology SpecialistMicrosoft Corporation

what we will cover
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
session prerequisites
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

agenda
Agenda
  • Multi-threading in .NET
  • Synchronization
  • Inter-thread communication
  • Improving Performance with Thread Pools
multi threading in net when should you use threads
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
multi threading in net threading issues
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
multi threading in net threading on the windows platform
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
multi threading in net net simplifies threading choices
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

...

}

multi threading in net using threads
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
multi threading in net simple sample application in c

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

agenda1
Agenda
  • Multi-threading in .NET
  • Synchronization
  • Inter-thread communication
  • Improving Performance with Thread Pools
synchronization from sta to mta
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
synchronization managing contention
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
synchronization using a lock block
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

synchronization obtaining locks with monitors
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

synchronization choosing a synchronization method
SynchronizationChoosing a Synchronization Method
  • Things to consider
    • Complexity
    • Ability to split locks
    • Specialized mechanisms, e.g. ReaderWriterLock
agenda2
Agenda
  • Multi-threading in .NET
  • Synchronization
  • Inter-thread Communication
  • Improving Performance with Thread Pools
inter thread communication when threads need to talk
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
inter thread communication thread lifecycle
Inter-thread CommunicationThread lifecycle
  • Waiting and ready queues
  • States

Suspended

Running

Unstarted

Aborted

WaitSleepJoin

inter thread communication simple communication with wait pulse
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()?
inter thread communication notification alternatives
Inter-thread CommunicationNotification Alternatives
  • Pausing/sleeping
  • Events (incl. ManualResetEvent)
  • Timers (server and windows)
  • Interlocked increment and decrement
inter thread communication wait pulse in sample application

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

inter thread communication manipulating other threads
Inter-thread CommunicationManipulating other threads
  • Finding threads
  • Thread information
    • ThreadState
    • IsAlive
  • Joining another thread
    • Thread.Join()
inter thread communication terminating threads
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
agenda3
Agenda
  • Multi-threading in .NET
  • Synchronization
  • Inter-thread communication
  • Improving Performance with Thread Pools
thread pools what are thread pools
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
thread pools net thread pools
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
thread pools queuing work items
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
thread pools coding to work with thread pools
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
thread pools delaying execution
Thread PoolsDelaying execution
  • Timed execution of delegates
  • Useful for timer events etc.
  • Use RegisterWaitForSingleObject
slide37

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

session summary
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