We are currently using for compression the GZipOutputStream class of ICsharpCode.SharpZipLib library. We do it from a single thread.
I want to split my input data stream into chunks and compress them in parallel. I'm worried though that this library may have some statics inside which will be overwritten from multiple threads and therefore corrupt the resulting stream.
Any thoughts will be appreciated.
It is standard practice to make sure all static members are thread-safe when coding classes. So I would think it is very unlikely that you would have a problem due to that issue. Of course, if you plan on using the same GZipOutputStream
from different threads then that would definitely be problematic since instance members of that class are not thread-safe.
What you might be able to do is to create a thread-safe middleman Stream
class (think decorator pattern) and pass that to the GZipOutputStream
. This custom stream class, call it ThreadSafeStream
, would itself accept a Stream
instance and would use the appropriate mechanisms to synchronize access to it.
You will create one GZipOutputStream
instance for each thread and they will all share the same ThreadSafeStream
wrapper instance. I suspect there will probably be a lot of bottlenecking in the ThreadSafeStream
methods, but you should be able to gain some parallelism from this.