Replace boolean[]{false} with AtomicBool / Terminator / Continuator
Those counter and terminators should be created by CQuery internal protected methods. Those methods will return "just wrapper", non-blocking wrapper or synchronized wrapper (which will make parallel query sequential).
...
No, we don't need protected methods because every implementation of each, while etc will use different iteration strategy, especially parallel methods could use some form of non-blocking but splittable counters.
For example, it is trivial to create as many counters as threads and initialize with correct offset, when we split array processing.
Replace `int[]{0}` with AtomicInteger / Counter
Replace `boolean[]{false}` with AtomicBool / Terminator / Continuator
Those counter and terminators should be created by CQuery internal protected methods. Those methods will return "just wrapper", non-blocking wrapper or synchronized wrapper (which will make parallel query sequential).
...
No, we don't need protected methods because every implementation of `each`, `while` etc will use different iteration strategy, especially parallel methods could use some form of non-blocking but splittable counters.
For example, it is trivial to create as many counters as threads and initialize with correct offset, when we split array processing.
Essentially, the point is to not use stream directly, but use stream.spliterator and then implement loops manually.
reopened. prefer something like `zip` method rather than atomic counters
https://stackoverflow.com/questions/17640754/zipping-streams-using-jdk8-with-lambda-java-util-stream-streams-zip
**Essentially, the point is to not use stream directly, but use `stream.spliterator` and then implement loops manually.**
Replace
int[]{0}with AtomicInteger / CounterReplace
boolean[]{false}with AtomicBool / Terminator / ContinuatorThose counter and terminators should be created by CQuery internal protected methods. Those methods will return "just wrapper", non-blocking wrapper or synchronized wrapper (which will make parallel query sequential).
...
No, we don't need protected methods because every implementation of
each,whileetc will use different iteration strategy, especially parallel methods could use some form of non-blocking but splittable counters.For example, it is trivial to create as many counters as threads and initialize with correct offset, when we split array processing.
reopened. prefer something like
zipmethod rather than atomic countershttps://stackoverflow.com/questions/17640754/zipping-streams-using-jdk8-with-lambda-java-util-stream-streams-zip
Essentially, the point is to not use stream directly, but use
stream.spliteratorand then implement loops manually.But what to do if we know, that
spliterator.forEachRemainingis very efficient?