public void TestPipelineHighlyParallel() { var success = true; int expected = 0, actual = 0; bool[] finished = new bool[100]; ParameterizedThreadStart container = (index) => { finished[(int)index] = true; var random = new Random(); var pipeline = new ThreadedTaskPipeline <int>(); ThreadStart processor = () => { pipeline.Connect(); for (int i = 0; i < 100; i++) { var v = pipeline.Take(); if (v != i) { success = false; expected = i; actual = v; break; } Thread.Sleep(random.Next(1, 10)); } }; var thread = new Thread(processor); thread.Start(); for (int i = 0; i < 100; i++) { pipeline.Put(i); Thread.Sleep(random.Next(1, 10)); } thread.Join(); }; for (int i = 0; i < 100; i++) { new Thread(container).Start(i); } while (true) { bool allFinished = true; for (int i = 0; i < 100; i++) { allFinished = allFinished && finished[i]; } if (allFinished) { break; } } if (!success) { Assert.Equal(expected, actual); } }
public ClientChunkGenerator( IChunkSizePolicy chunkSizePolicy, IAssetManagerProvider assetManagerProvider) { this.m_ChunkSizePolicy = chunkSizePolicy; this.m_AssetManager = assetManagerProvider.GetAssetManager(); this.m_TextureAtlasAsset = this.m_AssetManager.Get<TextureAtlasAsset>("atlas"); this.m_Pipeline = new ThreadedTaskPipeline<ChunkGenerationRequest>(); var thread = new Thread(this.Run) { IsBackground = true, Priority = ThreadPriority.Highest }; thread.Start(); }
public void TestPipelineHighlyParallel() { var success = true; int expected = 0, actual = 0; var finished = new bool[100]; ParameterizedThreadStart container = index => { finished[(int) index] = true; var random = new Random(); var pipeline = new ThreadedTaskPipeline<int>(); ThreadStart processor = () => { pipeline.OutputConnect(); for (var i = 0; i < 100; i++) { var v = pipeline.Take(); if (v != i) { success = false; expected = i; actual = v; break; } Thread.Sleep(random.Next(1, 10)); } }; var thread = new Thread(processor); thread.Start(); for (var i = 0; i < 100; i++) { pipeline.Put(i); Thread.Sleep(random.Next(1, 10)); } thread.Join(); }; for (var i = 0; i < 100; i++) new Thread(container).Start(i); while (true) { var allFinished = true; for (var i = 0; i < 100; i++) allFinished = allFinished && finished[i]; if (allFinished) break; } if (!success) Assert.Equal(expected, actual); }
public void TestPipelineBasic() { var pipeline = new ThreadedTaskPipeline<int>(); ThreadStart processor = () => { pipeline.OutputConnect(); Assert.Equal(pipeline.Take(), 1); Assert.Equal(pipeline.Take(), 2); Assert.Equal(pipeline.Take(), 3); }; pipeline.Put(1); pipeline.Put(2); pipeline.Put(3); var thread = new Thread(processor); thread.Start(); thread.Join(); }
public void TestPipelineParallel() { var pipeline = new ThreadedTaskPipeline <int>(); ThreadStart processor = () => { pipeline.Connect(); Assert.Equal(pipeline.Take(), 1); Assert.Equal(pipeline.Take(), 2); Assert.Equal(pipeline.Take(), 3); }; var thread = new Thread(processor); thread.Start(); pipeline.Put(1); pipeline.Put(2); pipeline.Put(3); thread.Join(); }
public ServerChunkGenerator( IChunkSizePolicy chunkSizePolicy, IAssetManagerProvider assetManagerProvider, IGeneratorResolver generatorResolver, IEdgePointCalculator edgePointCalculator, IChunkConverter chunkConverter, IChunkCompressor chunkCompressor) { this.m_ChunkSizePolicy = chunkSizePolicy; this.m_EdgePointCalculator = edgePointCalculator; this.m_AssetManager = assetManagerProvider.GetAssetManager(); this.m_ChunkCompressor = chunkCompressor; this.m_ChunkConverter = chunkConverter; this.m_GeneratorPipeline = new ThreadedTaskPipeline<ChunkGenerationRequest>(); this.m_ConverterPipeline = new ThreadedTaskPipeline<ChunkConversionRequest>(false); this.m_CompressorPipeline = new ThreadedTaskPipeline<ChunkCompressionRequest>(false); this.m_Generator = generatorResolver.GetGeneratorForGame(); this.m_Generator.SetSeed(10000); new Thread(this.GeneratorRun) { IsBackground = true, Priority = ThreadPriority.Highest }.Start(); new Thread(this.ConverterRun) { IsBackground = true, Priority = ThreadPriority.Highest }.Start(); new Thread(this.CompressorRun) { IsBackground = true, Priority = ThreadPriority.Highest }.Start(); }
public void TestPipelineParallelTo1000TakeSided() { var random = new Random(); var pipeline = new ThreadedTaskPipeline <int>(); var success = true; int expected = 0, actual = 0; ThreadStart processor = () => { pipeline.Connect(); for (int i = 0; i < 1000; i++) { var v = pipeline.Take(); if (v != i) { success = false; expected = i; actual = v; break; } Thread.Sleep(1); } }; var thread = new Thread(processor); thread.Start(); for (int i = 0; i < 1000; i++) { pipeline.Put(i); Thread.Sleep(random.Next(1, 2)); } thread.Join(); if (!success) { Assert.Equal(expected, actual); } }
public void TestPipelineParallelTo1000TakeSided() { var random = new Random(); var pipeline = new ThreadedTaskPipeline<int>(); var success = true; int expected = 0, actual = 0; ThreadStart processor = () => { pipeline.OutputConnect(); for (var i = 0; i < 1000; i++) { var v = pipeline.Take(); if (v != i) { success = false; expected = i; actual = v; break; } Thread.Sleep(1); } }; var thread = new Thread(processor); thread.Start(); for (var i = 0; i < 1000; i++) { pipeline.Put(i); Thread.Sleep(random.Next(1, 2)); } thread.Join(); if (!success) Assert.Equal(expected, actual); }