private void PerformMultithreadedTest(FilterHandleSetNode topNode, int numberOfThreads, int numberOfRunnables, int numberOfSecondsSleep) { Log.Info(".performMultithreadedTest Loading thread pool work queue,numberOfRunnables=" + numberOfRunnables); var pool = new DedicatedExecutorService("test", numberOfThreads, new ImperfectBlockingQueue <Runnable>()); for (var i = 0; i < numberOfRunnables; i++) { var runnable = new IndexTreeBuilderRunnable(_eventType, topNode, _testFilterSpecs, _matchedEvents, _unmatchedEvents); pool.Submit(runnable.Run); } Log.Info(".performMultithreadedTest Starting thread pool, threads=" + numberOfThreads); // Sleep X seconds Sleep(numberOfSecondsSleep); Log.Info(".performMultithreadedTest Completed, numberOfRunnables=" + numberOfRunnables + " numberOfThreads=" + numberOfThreads + " completed=" + pool.NumExecuted); pool.Shutdown(); pool.AwaitTermination(TimeSpan.FromSeconds(1)); Assert.AreEqual(pool.NumExecuted, numberOfRunnables); }
private void TryIterate(int numThreads, int numRepeats) { var callList = CompatExtensions.XRange(0, numThreads) .Select(ii => new StmtNamedWindowQueryCallable(Convert.ToString(ii), _engine, numRepeats)) .ToList(); var threadPool = new DedicatedExecutorService("test", numThreads); var threadFutures = callList .Select(threadPool.Submit) .ToList(); threadPool.Shutdown(); threadPool.AwaitTermination(new TimeSpan(0, 0, 10)); Thread.Sleep(100); threadFutures.ForEach( future => Assert.IsTrue(future.GetValueOrDefault())); }
private void TryStatementListenerAddRemove(int numThreads, EPStatement statement, bool isEPL, int numRepeats) { var threadPool = new DedicatedExecutorService("test", numThreads); var future = new Future <bool> [numThreads]; for (int i = 0; i < numThreads; i++) { var callable = new StmtListenerAddRemoveCallable(_engine, statement, isEPL, numRepeats); future[i] = threadPool.Submit(callable); } threadPool.Shutdown(); threadPool.AwaitTermination(new TimeSpan(0, 0, 30)); for (int i = 0; i < numThreads; i++) { Assert.IsTrue(future[i].GetValueOrDefault(), "Failed stmt=" + statement.Text); } }
public void Run() { if (_isWaitKeypress) { Console.WriteLine("...press enter to start simulation..."); Console.ReadKey(); } // Configure engine with event names to make the statements more readable. // This could also be done in a configuration file. Configuration configuration = new Configuration(); configuration.AddEventType("MarketDataEvent", typeof(MarketDataEvent).FullName); // Get engine instance EPServiceProvider epService = EPServiceProviderManager.GetProvider(_engineURI, configuration); // Set up statements var tickPerSecStmt = TicksPerSecondStatement.Create(epService.EPAdministrator); tickPerSecStmt.Events += LogRate; var falloffStmt = TicksFalloffStatement.Create(epService.EPAdministrator); falloffStmt.Events += MonitorRate; // Send events var threadPool = new DedicatedExecutorService(string.Empty, _numberOfThreads); MarketDataSendRunnable[] runnables = new MarketDataSendRunnable[_numberOfThreads]; for (int i = 0; i < _numberOfThreads; i++) { runnables[i] = new MarketDataSendRunnable(epService); threadPool.Submit(runnables[i].Run); } int seconds = 0; Random random = new Random(); while (seconds < _numSeconds) { seconds++; Thread.Sleep(1000); FeedEnum? feedToDropOff; if (random.NextDouble() * 100 < _dropProbability) { feedToDropOff = FeedEnum.FEED_A; if (random.Next(0, 2) == 1) { feedToDropOff = FeedEnum.FEED_B; } Log.Info("Setting drop-off for feed {0}", feedToDropOff); } else { feedToDropOff = null; } foreach (MarketDataSendRunnable t in runnables) { t.SetRateDropOffFeed(feedToDropOff); } } Log.Info("Shutting down threadpool"); for (int i = 0; i < runnables.Length; i++) { runnables[i].SetShutdown(); } threadPool.Shutdown(); threadPool.AwaitTermination(new TimeSpan(0, 0, 0, 10)); }