That's 300 threads available for servicing HTTP requests. If you call out to a database in an HTTP request, then that thread is still blocked and that page will not be rendered. That's bad, because you want your thread pool sized appropriately to your task.
Think of a thread pool as gears. If you're only doing one thing, then you can use a small gear and move around very quickly -- for example, for HTTP requests that don't block, you want to have roughly the same number of threads as you have cores. 8 core CPU means 8 threads.
When you talk to a database, that's a blocking API, using IO and Network to talk to something very slow. So you need a larger gear there, because it will take much longer for a response to get back to you. You want to keep the CPU busy enough that there's always some database response coming back from some where, so you need more threads to cover the lag. So you create a larger thread pool and assign it to managing the database requests.
Will.