Multi-Cores and .NET Threading

My first job after university involved designing and writing parallel algorithms, and over the intervening 20 years I’ve always taken a keen interest in the subject. I’d always thought that by now, desktop PCs would contain upwards of 32 processors, whereas 2 processors are only just becoming commonplace. At the March 2007 MVP summit, Bill Gates said that parallel programming will be one of the big new challenges facing the .NET development programming community:

“…the ability to take multiple processors and use them in parallel has been a
programming challenge going back many, many decades, so now it’s important
that we actually solve that problem, and make it possible for developers of all
types to take advantage of these multi-core devices.”

May’s 2007 issue of MSDN magazine has an excellent article on Reusable Parallel Data Structures and Algorithms by Joe Duffy, a renowned developer in the .NET threading arena. He has an upcoming book “Concurrent Programming on Windows”, due to be released by Addison Wesley sometime in 2007. One to watch out for…

Over at Michael Suess’s ThinkingParallel blog, he’s been running a series of interviews with parallelism industry leaders in different environments, including Ten Questions with Joe Duffy about Parallel Programming and .NET Threads.

The following are all good resources on how to get started for developers new to .NET threading:

There is also an index of past MSDN Magazine articles on .NET concurrency.

Logging and ASP.NET Health Monitoring

In the comments to my post of a few days ago on logging with log4net, Alik Levin raised a good question:

“Why would I actually use log4net for ASP.NET 2 (VS2005) instead of the built in
health monitoring?”

I’m sure I must have seen ASP.NET 2.0 Health Monitoring before but it had completely slipped my mind! I followed the link Alik supplied and it does look interesting. Now, I obviously have not used it in a live application, so I’m shooting from the hip, but to answer Alik’s question, the only reasons that spring to mind are to have a coherent logging stragey in place across all application types, and perhaps the number of different ‘appenders’ that are available. Also, the API seems a bit heavy if I have to instantiate a class for every event that is raised. That said, if you are starting out on a new project it’s definitely worth evaluating.