Пример #1
0
 public BlockDiskWorker(IO.DataProviders.BlockDataProvider input,
                        IO.DataProviders.BlockDataProvider Output,
                        Compression.Strategy.Compression compression,
                        Compression.Enums.CompressionType compressionType)
 {
     initialize(input, Output, compression, compressionType);
 }
Пример #2
0
 public BlockCpuWorker(IO.DataProviders.BlockDataProvider input,
                       IO.DataProviders.BlockDataProvider output,
                       Compression.Strategy.Compression compression,
                       Compression.Enums.CompressionType compressionType,
                       int currentCore)
 {
     Initialize(input, output, compression, compressionType, currentCore);
 }
Пример #3
0
 /// <summary>
 /// Get rid of nasty things
 /// </summary>
 public void Stop()
 {
     this._input      = null;
     this._output     = null;
     this.compression = null;
     foreach (var t in this._threads)
     {
         t.Abort();
     }
     this._threads = null;
 }
Пример #4
0
 public Disk(object readLock, object writeLock,
             BlockDataProvider readProvider, BlockDataProvider writeProvider,
             Queue <ByteBlock> readQueue, Queue <ByteBlock> writeQueue,
             int queueCapacity,
             ref AutoResetEvent resetEvent,
             Compression.Enums.CompressionAlgorithms algorithms,
             Compression.Enums.CompressionType CompressionType) : base(readLock, writeLock, writeQueue, readQueue)
 {
     this.queueCapacity   = queueCapacity;
     this.readProvider    = readProvider;
     this.writeProvider   = writeProvider;
     this.waitHandle      = resetEvent;
     this.algorithms      = algorithms;
     this.CompressionType = CompressionType;
 }
Пример #5
0
        /// <summary>
        /// Get rid of nasty things
        /// </summary>
        public void Stop()
        {
            _disk.CleanResources();
            _cpu.CleanResources();

            this.input       = null;
            this.Output      = null;
            this.compression = null;
            this.readQueue   = null;
            this.writeQueue  = null;

            foreach (var t in this._threads)
            {
                t.Abort();
            }
            this._threads = null;
        }
Пример #6
0
        /// <summary>
        /// Class initialization
        /// </summary>
        /// <param name="input">DataProvider for reading data from source</param>
        /// <param name="output">DataProvider for writing data to destionation</param>
        /// <param name="compression">High level of compression class</param>
        /// <param name="compressionType">Compress/Decompress</param>
        /// <param name="currentCore">Lowest idle core</param>
        public void Initialize(IO.DataProviders.BlockDataProvider input,
                               IO.DataProviders.BlockDataProvider output,
                               Compression.Strategy.Compression compression,
                               Compression.Enums.CompressionType compressionType,
                               int currentCore)
        {
            _threads = new Thread[2];

            this._input  = input;
            this._output = output;
            //Create new parameterize threads
            _threads[0] = new Thread(new ParameterizedThreadStart(Processing));
            _threads[1] = new Thread(new ParameterizedThreadStart(Processing));

            _currentBlock    = 0;
            _last            = false;
            this.compression = compression;
            _compressionType = compressionType;
            this.currentCore = currentCore;
        }
Пример #7
0
        /// <summary>
        /// Initialize
        /// </summary>
        /// <param name="input">DataProvider for reading data</param>
        /// <param name="Output">DataProvider for writing data</param>
        /// <param name="compression">High level class for compression</param>
        /// <param name="compressionType">Compress/Decompress</param>
        void initialize(IO.DataProviders.BlockDataProvider input,
                        IO.DataProviders.BlockDataProvider Output,
                        Compression.Strategy.Compression compression,
                        Compression.Enums.CompressionType compressionType)
        {
            Console.WriteLine("\n\r[Output]: Computation started!\n\r");
            //get info about chunks
            var chunkSize      = input.GetChunkSize();
            var fileChunks     = Computation.Utils.GetComputationInfo.GetNumberOfChunksForFile(chunkSize, input.GetObjectSize());
            var numberOfChunks = Computation.Utils.GetComputationInfo.GetMaximumChunks(chunkSize);
            //we will be using half of the system free ram for queue, so we won't have any problem with memory leaks
            int queueCapacity = (int)(numberOfChunks / 2);

            this.input       = input;
            this.Output      = Output;
            this.readQueue   = new Queue <Data.ByteBlock>(queueCapacity);
            this.writeQueue  = new Queue <Data.ByteBlock>(queueCapacity);
            this.compression = compression;

            //Inner classes
            _disk = new Disk(this.readLock, this.writeLock,
                             this.input, this.Output,
                             this.readQueue, this.writeQueue,
                             queueCapacity,
                             ref waitHandler,
                             this.compression.algorithms,
                             compressionType);

            _cpu = new Cpu(this.readLock, this.writeQueue, this.writeQueue, this.readQueue, this.compression, compressionType);

            //Creating threads with innder classes realizations
            _threads    = new Thread[3];
            _threads[0] = new Thread(new ThreadStart(_disk.StartRead));
            _threads[1] = new Thread(new ThreadStart(_disk.StartWrite));
            _threads[2] = new Thread(new ThreadStart(_cpu.StartWork));
        }
Пример #8
0
 //Get rid of inner nasty things
 public override void CleanResources()
 {
     base.CleanResources();
     this.readProvider  = null;
     this.writeProvider = null;
 }