如下图,早期是没有线程概念的,只有进程的概念,操作系统以进程为调度单位。这个时期,进程相当于现在单线程的进程(创建进程时,里面有一个函数入口称之为主线程),可以这么来理解。
后来出现了线程,为啥?因为多核心的出现,为了更好的发挥多核心的能力,榨干cpu。为啥会出现多核心?因为主频提升遇到了瓶颈,主频达到3GHz等已经好多年了,但目前市面上流通的还是2-3GHz为主。你有见过10GHz,100GHz主频的cpu么?估计几百年都难哩。那主频遇到了瓶颈,该咋提高CPU性能呢?那就用数量来凑,于是多核心时代来临。那为啥主频能提高性能呢?因为主频越高,单位时间内执行的指令就越多,程序运行速度就越快,自然性能就高。当然编译器也是一方面,编译器优化越高同样的代码编译出来的指令就越少,那程序运行自然就更快。——但这得看软件,优秀的程序员了。但是提升主频是硬件厂家能直接干涉的东东,所以这块也是前期cpu发展的一块发力之处,直到遇见瓶颈,才堆积多核心。
刚开始出现线程,内核开发人员是不支持的——人家懒得支持因为没有说服力,你得证明线程比进程有优点呀,不然人家那么忙凭啥给你支持?于是最开始线程的实现是用户态实现的线程,由用户来管理。内核调度器对用户态线程没有感知,因为和内核调度器打交道的是进程,这有很大弊端——一旦用户态线程调用阻塞IO接口那么整个进程都被切换出去,这样其他同一个进程内的用户态线程都被阻塞了,这很不符合预想——随着用户态线程的出现,证明了线程的优点:切换快,占用资源少。——于是各大操作系统的内核开发者就开始支持了内核线程——用户态线程是进程在用户态创建的由用户管理,现在内核线程的出现,导致内核调度器调度单位换成了线程,内核线程完全由内核管理,掌控其生死。那么这个时候就来到了多内核线程时代,同一个进程里的内核线程被阻塞了,其他内核线程照样可以执行不会受到干扰(除非下一个调度的线程是别的进程)。这样极大地提高了并发并行能力。



