How to handle multiple memory-io hungry processes and threads

Operating systems are good at dealing with load balancing between multiple CPUs but is something similar done on systems with multiple memory channels so that applications are prevented from overusing a single channel while other channels are underused?