Is Java 7 ready for the multicore revolution?
Henrik Engström doesn't think so. In a recent blog entry, he argues that "the new programming languages must have support to handle many-cores built into the language rather than adding these important features as APIs later on."
In its early days, few probably could've foreseen the impact that concurrency and multicore programming were going to have on the Java programming model -- all this, driven by the rapid commoditzation and increasing power of processors. But as the JVM iteself evolves to support multiple languages, languages like Scala might become the language of choice for concurrent programming.
If improving application performance is the real question here, then perhaps Engström is right in suggesting that I/O and memory management may be the real bottlenecks, not necessarily how many processors we throw at the problem. He references Brian Goetz's article Java theory and practice: Stick a Fork in it,Part 1, which talks about the new fork-join framework which will be part of the java.util.concurrent packages coming in Java 7:
"Server applications typically run many more concurrent threads, or requests, than there are processors available. The reason is because in most server applications, the processing of a request includes a fair amount of I/O, which does not require very much of the processor. (All network server applications do a lot of socket I/O, as requests are received via sockets; many do a fair amount of disk (or database) I/O as well.) If each task spends 90 percent of its time waiting for I/O to complete, you’ll need 10 times as many concurrent tasks as processors to keep the processors fully utilized. As processor counts increase, there may not be enough concurrent requests to keep all the processors busy."
All this begs the question, are we even going to know how to use all this new processing power available to us as part of the multicore revolution?
It probably doesn't matter much to folks like Daniel Lemire who believe that there is no upcoming multicore revolution in computer programming. In fact, he argues that for most large enterprises, the biggest performance bottleneck really lies at the data tier. Moreover, many of the "hard" performance problems can be solved by frameworks like MapReduce and Hadoop and by partitioning your storage tier.
Nevertheless, Java 7 is certainly priming itself for the brave new 'parallel' universe that will be ushered in by the multicore revolution. Also, when Microsoft and Intel invest in something, you can bet that a tidal shift is just on the horizon. The two companies recently announced a joint venture to invest $20M in parallel computing.
What do you think -- is multicore programming going to cause a radical shift in how we build enterprise applications?