Single-threaded providers work reliably only with single-threaded consumers. Single-threaded consumers can work with all types of objects.