I am trying to call getBlock for 100k blocks, but it is too slow to call them sequentially. This is what I am trying. I have a full node of bitcoin core running. I set the -rpcthreads=100 and -rpcworkqueue=100, and I use js to make Promise.all([multiple rpc calls]). To my understanding, rpcthreads allows concurrent calls, but maybe I misunderstood it. I expected the time it takes to run 2 getblock to be similar of running 1. However, I am not seeing a huge performance increase (running 2 roughly takes double the time). What is the correct way to make bitcoin core accept concurrent rpc requests? Thanks!

my bitcoin core config: -server -rpcuser=un -rpcpassword=pw -txindex=1 -rpcthreads=100 -rpcworkqueue=100

my attempt to make it concurrent (client being a wrapper class around the rpc api.):

const before = Date.now();
await Promise.all([
const afterAll = Date.now();

console.log('time for all');
console.log(afterAll - before); 

2 Answers 2


This is expected. Most of the RPC handling is single-threaded due to access to internal data structures that aren't designed for multi-threaded access.


I would assume the issue is not Bitcoin Core, even with default RPC settings I do see noticeable increase in client performance when using async/await (C# library). My suggestion is to investigate how the client code handles the RPC request/response + block parsing.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.