Concurrency Learning Curve

by Kevin Farnham

The necessity for applications to utilize the multiple processing cores that are available on modern PCs is increasingly a topic of conversation. It's recognized that the old formula of "faster processors will keep my increasingly complex application humming along" will no longer work. Instead, applications that utilize the multiple processing cores in standard office and home PCs will have much less latency than applications that continue along the single-threaded development path.

There's an interesting developer poll on the Go-Parallel site. The poll question is:

Where are you on the concurrency learning curve?

The possible responses are:

  • I'm just discovering concurrency

  • I've used threading before

  • I'm a threading guru

  • I'm using implicit parallelism

  • I'm researching experimental approaches

This is an important question. It seems to me that companies that develop software for home and office PCs simply have not caught on to the fact that a revolutionary turning point in software development is at hand. I put up a poll at asking:

How many processing cores will a typical new low-end (under $1000) computer have in 2012?

The results, reported in my "Poll: Many Core PCs Expected Very Soon", was that a majority of respondants expected that low-priced PCs will have 16 cores in 2012.

If this indeed happens, then the performance and response differences between a traditional single-threaded application and a competitor's multithreaded application will be enormous -- consigning the single-threaded application to mere historic relevance.

The Go-Parallel site has a lot of relevant material on where (in my view) software development has to be heading in the near future. I'm actually very surprised the need for concurrent programming isn't getting more attention than it has lately.

Anyway, if you're a developer, check out the site and participate in the poll. I'm interested in seeing more data on where developers stand with respect to multithreaded development experience.