Most modern operating systems allow users to run many processes simultaneously. Managing these processes can be a complex task for operating systems. Since a single processor can only run a single process at a time, operating systems require the ability to alternate processor cycles between processes. Even if a computer has multiple cores, each core is usually tasked with more processes than it can run at a time. Many operating systems also include functionality for processes to communicate with each other.