So there is a master network strand, which drives the connection process, and protects shared resources, like the address pool and certain config, and there is a strand for each channel. These all operate on the single network thread pool. There is only one other thread pool, which is to isolate CPU intensive prevout query and script validation. The database is synchronous and lock-free, so all database calls are just simple function calls from strands on either of these pools. Channels directly read/write the store, with the major block commitments coming concurrently from the channels that downloads the blocks.