Multi-core architectures have supplanted single core schemes, because they reduce energy consumption by allowing lower clock frequencies. They provide the additional, less exploited benefit of allowing a trade-off between energy consumption and delay by turning off subsets of cores. We investigate what the benefits of this transition are in managing the tradeoff between energy consumption and delay performance, and whether heterogeneity brings additional benefits to outweigh its increased complexity. To do this, we study optimal sleep policies in two settings: switching of homogeneous cores on a fast timescale, which models multiple cores in a CPU, and switching of heterogeneous cores on a slow timescale, which models servers of different generations in a data center. In the homogeneous case, we show the optimal policy is monotone hysteretic, and that the performance is less sensitive to load estimation errors at the design stage when at least two cores are present. In the heterogeneous case, we provide a low complexity algorithm to minimize the power requirements while providing a specified minimum processing speed.