Thermal and energy-aware computing techniques aim to mitigate high temperatures and power consumption caused by technology scaling. Various methodologies are presented and compared, including static floorplanning algorithms and dynamic runtime techniques. Static approaches focus on design phases while dynamic approaches control task scheduling and resource allocation at runtime. Thermal-aware techniques generally outperform energy-aware techniques, but runtime approaches have overhead. Future work could reduce overhead while improving control granularity for practical thermal and energy management.