1、锁
在单核上,多个线程执行锁或者临界区时,实际上只有一个线程在执行临界区代码,而核心也只支持一个线程执行,因此不存在冲突。如果某个线程持有锁,那只有其他线程不会被调度到CPU上执行,影响的只是持有和释放锁的时间,处理器时刻在运行着。但是在多核上运行时,锁或临界区会导致其余处理器空闲而只允许一个处理器执行持有锁的那个线程,这是一个串行的过程,会影响性能。
2、负载均衡
单核上不用考虑负载均衡,因为各个线程轮流执行,当一个线程执行完时,则会执行另外一个线程,不存在线程等待问题。即是各个线程的任务非诚不均衡,也不会影响总执行时间。而在多核上执行时,此时最终时间由运行时间最长的线程决定;
3、任务调度
单核上,任务调度完全是操作系统的工作,无需软件开发人员干预,通常有时间片轮转、优先级算法等。而在多核上运行时,软件开发人员要合理地在核心间分配任务,以尽量同时结束计算(操作系统转向软件开发人员)
4、程序终止
多线程环境下,程序终止时需要确定各个线程都已经计算完成。