private void TrySend(EPServiceProvider epService, int numThreads, int numRepeats, int numStatements) { // Create same statement X times var stmt = new EPStatement[numStatements]; var listeners = new SupportMTUpdateListener[stmt.Length]; for (int i = 0; i < stmt.Length; i++) { stmt[i] = epService.EPAdministrator.CreateEPL( " select * " + " from " + typeof(SupportMarketDataBean).FullName + "#groupwin(symbol)#uni(price)"); listeners[i] = new SupportMTUpdateListener(); stmt[i].Events += listeners[i].Update; } var threadPool = Executors.NewFixedThreadPool(numThreads); var future = new Future <bool> [numThreads]; // Start send threads // Each threads sends each symbol with price = 0 to numRepeats long delta = PerformanceObserver.TimeMillis( () => { for (int i = 0; i < numThreads; i++) { var callable = new StmtSharedViewCallable(numRepeats, epService, SYMBOLS); future[i] = threadPool.Submit(callable); } // Shut down threadPool.Shutdown(); threadPool.AwaitTermination(10, TimeUnit.SECONDS); }); for (int i = 0; i < numThreads; i++) { Assert.IsTrue(future[i].GetValueOrDefault()); } Assert.That(delta, Is.LessThan(5000)); // should take less then 5 seconds even for 100 statements as they need to share resources thread-safely // Assert results foreach (SupportMTUpdateListener listener in listeners) { Assert.AreEqual(numRepeats * numThreads * SYMBOLS.Length, listener.NewDataList.Count); EventBean[] newDataLast = listener.NewDataList[listener.NewDataList.Count - 1]; Assert.AreEqual(1, newDataLast.Length); var result = newDataLast[0]; Assert.AreEqual(numRepeats * numThreads, result.Get("datapoints").AsLong()); Assert.IsTrue(Collections.List(SYMBOLS).Contains(result.Get("symbol"))); Assert.AreEqual(SumToN(numRepeats) * numThreads, result.Get("total")); listener.Reset(); } for (int i = 0; i < stmt.Length; i++) { stmt[i].Stop(); } }
private void TrySend(int numThreads, int numRepeats, int numStatements) { // Create same statement X times var stmts = new EPStatement[numStatements]; var listeners = new SupportMTUpdateListener[stmts.Length]; for (int i = 0; i < stmts.Length; i++) { stmts[i] = _engine.EPAdministrator.CreateEPL( " select * " + " from " + typeof(SupportMarketDataBean).FullName + "#groupwin(Symbol)#uni(Price)"); listeners[i] = new SupportMTUpdateListener(); stmts[i].Events += listeners[i].Update; } // Start send threads // Each threads sends each symbol with price = 0 to numRepeats var startTime = PerformanceObserver.MilliTime; var threadPool = Executors.NewFixedThreadPool(numThreads); var future = new Future <bool> [numThreads]; for (int i = 0; i < numThreads; i++) { var callable = new StmtSharedViewCallable(numRepeats, _engine, SYMBOLS); future[i] = threadPool.Submit(callable); } // Shut down threadPool.Shutdown(); threadPool.AwaitTermination(TimeSpan.FromSeconds(10)); for (int i = 0; i < numThreads; i++) { Assert.IsTrue(future[i].GetValueOrDefault()); } var endTime = PerformanceObserver.MilliTime; var delta = endTime - startTime; Assert.IsTrue(delta < 5000, "delta=" + delta + " not less then 5 sec"); // should take less then 5 seconds even for 100 statements as they need to share resources thread-safely // Assert results foreach (SupportMTUpdateListener listener in listeners) { Assert.AreEqual(numRepeats * numThreads * SYMBOLS.Count, listener.GetNewDataList().Count); EventBean[] newDataLast = listener.GetNewDataList()[listener.GetNewDataList().Count - 1]; Assert.AreEqual(1, newDataLast.Length); EventBean result = newDataLast[0]; Assert.AreEqual(numRepeats * numThreads, result.Get("datapoints").AsLong()); Assert.IsTrue(SYMBOLS.Contains((string)result.Get("Symbol"))); Assert.AreEqual(SumToN(numRepeats) * numThreads, result.Get("total")); listener.Reset(); } foreach (var stmt in stmts) { stmt.Stop(); } }