Optimal thread-to-core mapping is a critical issue for performance improvement in a heterogeneous multi-core processor that consists of out-of-order cores and in-order cores. Through the scheduling, threads with heavy workloads can be executed in an out-of-order core, whereas other threads can be concurrently executed in in-order cores. In addition, a core speed variation is deemed a factor to improve the performance; therefore, a scheduler has to handle the heterogeneity to derive optimal speedup. In this paper, we propose the workload aware and estimation-based dynamic thread scheduling for a heterogeneous multi-core. The scheduler profiles the workload of threads and classifies the threads as sequential or parallel threads and detects critical sections that are the bottleneck of the program. Based on the profiled information, the scheduler estimates the expected performance of each core. Core monitoring process measures the speed variation of each core concurrently. Using the information of threads and cores, the scheduler allocates the thread to the appropriate processor core dynamically.