Correct, but it was running on *NioClientManager* named thread. On Wednesday, 26 October 2016 19:11:33 UTC+3, Matt Corallo wrote: > > I'm assuming you benchmarked and found that the CPU was spent not in > NioClientManager (or nio itself), but in callbacks, such as > findDoubleSpendsAgainst? > > On October 26, 2016 11:59:01 AM EDT, Justas Dobiliauskas < > [email protected] <javascript:>> wrote: >> >> Hey, on a large wallet I have noticed, that *NioClientManager* thread >> does a lot of CPU computation, and meantime other Wallet functions are >> unresponsive (possibly because of locking). No need to mention, that one >> thread = once CPU core to do the work. >> Is it possible to parallelize this thread work? >> One thing I thought would help - compute double spends in parallel. >> Quick update and test I did was: updated bitcoinj to support java 8 (as >> I'm not an expert in Java 6 threading), and trying to parallelize >> *findDoubleSpendsAgainst >> *method. >> >> private Set<Transaction> findDoubleSpendsAgainst(Transaction tx, >> Map<Sha256Hash, Transaction> candidates) { >> checkState(lock.isHeldByCurrentThread()); >> if (tx.isCoinBase()) return Sets.newHashSet(); >> >> final Set<TransactionOutPoint> outpoints = >> tx.getInputs().stream().map(i -> >> i.getOutpoint()).collect(Collectors.toSet()); >> >> final Set<Transaction> doubleSpendTxns = Sets.newConcurrentHashSet(); >> candidates.values().stream().parallel().forEach( >> c -> { >> c.getInputs().stream() >> >> .filter(i -> outpoints.contains(i.getOutpoint())) >> .forEach(o -> doubleSpendTxns.add(c)); >> }); >> >> return doubleSpendTxns; >> } >> >> >> Maybe it can be optimized even more, but at this point *NioClientManager* >> thread, together with new *ForkJoinPool* threads, consume all of the CPU >> cores and does their work x(core count) faster! >> Still this is only one method I have updated, I think this can be >> extended to use CPU better. >> What would be the comments about this approach and implementation on >> bitcoinj master for Java 6? >> >> Thanks, >> Justas >> >>
-- You received this message because you are subscribed to the Google Groups "bitcoinj" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
