Internally, thread safe allocators (like new/delete) have to sequence access to the single memory resource. They optimize this by taking smaller chunks from a per-thread larger allocation. So that's very efficient. But when it comes time to free the memory, and you aren't on the thread that allocated it, that can be expensive (like a lock). With little contention it's fine, but this is deallocating millions of little chunks per second.
(edited)