There's nothing to be gained from using multiple threads to read the file. That part of the procedure is I/O bound rather than CPU bound. So you are best to read the entire file from a single thread.
You then need to split the file into lines. That's something that is hard to do in parallel again because there is an issue of dependency. Line N+1 starts where line N ends. It will be simplest to do the splitting into lines in a single thread.
But you can run a pipeline between the I/O and the splitting into lines. Read the file in large chunks (say tens of KBs at a time). And pass each chunk down the pipeline to be processed into lines. You might need to place an upper bound on how much data is allowed to sit in the pipeline at any one moment. Otherwise you might exhaust memory if the file can be read more quickly than it can be processed.
So for this pipeline, you have a producer that reads the file, and a consumer that splits the contents of the file into lines.
Then you can run another pipeline. At the producer end you have list of lines produced by the previous step. That's pushed down the pipeline to the consumer which processes each line. The consumer will do that with parallel for.