1. A method comprising: monitoring processor state information relating to a processor; gathering the processor state information, wherein the processor state information provides processor state relating to one or more of characteristics of the processor, history of the processor, characteristics of a plurality of virtual machines associated with the processor, history of the plurality of virtual machines, and event monitoring data; and managing, using the processor state information, the plurality of virtual machines including a first virtual machine and a second virtual machine, wherein managing includes managing the characteristics of the processor and predetermined time slices allocated to each of the first virtual machine and the second virtual machine, and dynamically allocating resources to the first virtual machine or the second virtual machine, wherein dynamically allocating includes alternating between the first virtual machine and the second virtual machine, wherein alternating includes switching tasks being performed on the first virtual machine to the second virtual machine when the second virtual machine is determined to be better at performing the tasks than the first virtual machine based on the information and reallocating the predetermined time slices from the first virtual machine to the second virtual machine, wherein the second virtual machine is determined to be better based on the characteristics of the processor and independent of the predetermined allocated time slices.