Accessing one file by multiple threads for reading 1MB chunks is trivial, just determine the file length and the number of chunks beforehand. Queue up the the chunks and let them process in parallel by a given maximum number of threads. Each thread then opens the file in a non-blocking way, does a file seek to the desired chunk start position, and read the chunk. The same thread then can also do the processing.
Only the result writing will have to happen sequentially (I assume one cannot easily determine the output file position for a compressed chunk before the previous processing of the previous chunk is not completed): whenever a thread is ready with its chunk, it waits until the previous chunk is completed and written to disk, then the current thread can write the compressed chunk as well (and release the used mem).
However, you will have to test at how many parallel threads you will reach the maximum performance, this is totally dependend on your system, on the kind of storage device, the speed of the I/O channel, the CPUs and number of cores, memory speed file system involved and some more factors.
If you are unlucky, it might turn out the optimal number of threads is just one, and more can slow down the process. It might be higher, or course (look into this older Dr. Dobbs article, where multiple thread reads on a single file was optimal for 2-4 threads, depending on the used hardware). But the only reliable way to find out is to make some tests and measure by yourself.