package brainslug;
import brainslug.flow.builder.FlowBuilder;
import brainslug.flow.context.*;
import brainslug.flow.definition.Identifier;
import brainslug.flow.execution.node.task.SimpleTask;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import static brainslug.flow.builder.FlowBuilderSupport.id;
public class BenchmarkExample {
public static void main(String[] args) {
final DefaultBrainslugContext brainslugContext = new BrainslugContextBuilder().build();
final Identifier testFlow = id("testFlow");
brainslugContext.addFlowDefinition(new FlowBuilder() {
@Override
public void define() {
flowId(testFlow);
start(task(id("task"), new SimpleTask() {
@Override
public void execute(ExecutionContext context) {
System.out.println(context.getInstance().getIdentifier());
}
}));
}
}.getDefinition());
ExecutorService executor = Executors.newFixedThreadPool(10);
long startTime = System.currentTimeMillis();
for (int count = 0; count < 10000; count++) {
executor.submit(new Callable<Object>() {
@Override
public Object call() throws Exception {
return brainslugContext.startFlow(testFlow);
}
});
}
executor.shutdown();
try {
executor.awaitTermination(100, TimeUnit.MINUTES);
} catch (InterruptedException e) {
Thread.interrupted();
}
long endTime = System.currentTimeMillis();
System.out.println("Execution time: " + (endTime - startTime));
}
}