Dr. Dobb's is part of the Informa Tech Division of Informa PLC

This site is operated by a business or businesses owned by Informa PLC and all copyright resides with them. Informa PLC's registered office is 5 Howick Place, London SW1P 1WG. Registered in England and Wales. Number 8860726.

Channels ▼

Gastón Hillar

Dr. Dobb's Bloggers

Tasks Are Not Threads in .NET 4 Beta 1

August 01, 2009

.Net Framework 4.0 with its Parallel Extensions, still in Beta 1, will add the possibility to work with tasks. It is very important to understand that tasks aren't threads. Tasks run using threads. However, it doesn't mean they replace threads.Whilst working with Parallel Extensions CTP (Community Technology Preview) it was very difficult to debug code working with the new parallelism model. It wasn't easy to understand what was going on with parallelized loops. It was difficult to debug the new task-based programming code. The big problem was that the CTP didn't add debugging features for tasks. The IDE (Visual Studio 2008) was prepared for debugging threads. Thus, it wasn't able to debug tasks properly.

If you understand C style coding, the following line will summarize the situation:

(Threads != Tasks) && (Thread != Task)

You can take a look at the excellent diagram prepared by Cameron Hughes and Tracey Hughes in their post "Find John Fast!!". They've shown seven levels, from the domain model level to the hardware level. The Application Task Level (Level 3) is over both the Logical Task Level (Level 4) and the Process/Thread Level (Level 5).

As explained in the aforementioned diagram, tasks run on a different level. However, threads support tasks' executions. Hence, the tasks steal work from different threads to use processor time. I've already explained this mechanism in my previous post "Work Stealing queues in .Net 4 and in Previous Versions".

When you work with tasks, they run their code using underlying threads (software threads, scheduled on certain hardware threads or logical cores). However, there isn't a 1-to-1 relationship between tasks and threads. This means you're not creating a new thread each time you create a new task. The CLR creates the necessary threads to support the tasks' execution needs. Of course, this is a simplified vision of what goes on when creating tasks.

You can take advantage of most of the techniques you've learned so far working with threads when using task-based programming. However, you require new debugging techniques. Therefore, Visual Studio 2010, still in Beta 1, offers two new debugging windows:

• Parallel Stacks • Parallel Tasks

These new windows allow you to understand the relationship between the running tasks and their related threads, at run-time. This way, you can debug the task-based code without the problems found during the CTP tests.

It is very important to understand the differences between tasks and threads before starting to code task-based algorithms. The new debugging windows offer nice information for developers to understand what's going on in those parallelized loops and concurrent tasks.

Many developers worked with Parallel Extensions CTP and as they didn't have an appropriate debugger to understand what was going on, they thought tasks were difficult to control. They were indeed difficult to understand without these new debugging windows.

A Danish proverb says "Speedy execution is the mother of good fortune". Thus, stay tuned to Go Parallel using a successful task-based programming. I'll be adding a new post about debugging tasks soon.

Related Reading

More Insights

Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.