I'm the guy who wrote this code, but I'm no longer really with the project. I wanted to provide my thoughts. The project lead, Scott Conway, will have to work through the possibilities.

Naturally, if the machine is so swamped it shows no signs of life, that's a problem. In no way do I wish to deny or trivialize that issue.

My first thought is that there is nothing unique about a process that takes all available CPU time. Really, there's almost nothing wrong with it, either: a computer's resources are there to be used. That is, in fact, why I wrote the code this way. I saw no point in artificially limiting how fast opencsv can get through a file. Operating systems typically offer mechanisms for dealing with resource-hungry processes, e.g nice and renice on Unix. I found an article on Stackoverflow that might help.

I'm also surprised that the operating system, which switches regularly between tasks, does not give the probes enough CPU time even to respond. I could imagine the machine might be out of memory and spending all its time swapping instead of accomplishing work.

Could you give us a feel for how big this file is? How many bytes, how many columns and rows?

Your point about stream() and parallelStream() is taken. I do remember that part of that came about because I wrote the parallel code before we moved to Java 8, so the parallelism was in place before the question of streams arose. That parallelism also doesn't use the Java 8 mechanisms at its core. I don't remember if there was a good reason for why I chose to implement stream() and not parallelStream(). If there is no good reason, perhaps it would be wiser to hide the iterator code behind stream() and the parallel code behind parallelStream().