public static IFileProcessor Get(int parallelismCount, int queuesCapacity, int fileChunksSize)
 {
     if (parallelismCount <= 0) parallelismCount = 1;
     var readingQueues = new BlockingQueue<byte[]>[parallelismCount];
     var writingQueues = new BlockingQueue<byte[]>[parallelismCount];
     var processors = new AbstractQueueProcessor<byte[], byte[]>[parallelismCount];
     for (var i = 0; i < parallelismCount; i++)
     {
         readingQueues[i] = new BlockingQueue<byte[]>(queuesCapacity);
         writingQueues[i]=new BlockingQueue<byte[]>(queuesCapacity);
         processors[i] = new QueueByteCompressor(readingQueues[i],writingQueues[i]);
     }
     var reader = new StreamReaderToQueues(readingQueues,fileChunksSize);
     var writer = new StreamWriterFromQueues(writingQueues);
     return new ParallelProcessor(reader,processors,writer);
 }
 public static IFileProcessor Get(int parallelismCount, int queuesCapacity, int copyingBufferSize)
 {
     if (parallelismCount <= 0) parallelismCount = 1;
     var readingQueues = new BlockingQueue<byte[]>[parallelismCount];
     var writingQueues = new BlockingQueue<byte[]>[parallelismCount];
     var processors = new AbstractQueueProcessor<byte[], byte[]>[parallelismCount];
     for (var i = 0; i < parallelismCount; i++)
     {
         readingQueues[i] = new BlockingQueue<byte[]>(queuesCapacity);
         writingQueues[i] = new BlockingQueue<byte[]>(queuesCapacity);
         processors[i] = new IdenticQueueProcessor(readingQueues[i], writingQueues[i]);
     }
     var reader = new MultipartCompressedStreamReader(readingQueues, copyingBufferSize);
     var writer = new StreamWriterFromQueues(writingQueues);
     return new ParallelProcessor(reader, processors, writer);
 }