1、线程的模型

在Windows上,线程的模型大致为:

一个内核线程调用了多个用户线程如果某一个用户线程阻塞了,

导致内核线程也阻塞了,进而影响了其他线程也被阻塞了,又因为

Windows上用户线程特别多,所以Windows的线程调度器是跑在用户

态上的,那么线程之间的切换就比Linux上快的多。

在Linux上线程模型大致如下:

一个内核线程操纵一个 内核线程。所以Linux上会有200-300个线程。在Linux上

创建线程,直接就是创建内核线程,内核线程调用get_free_page会产生自己线程栈,

占两个页面,8k大小,默认的内核空间大小只有1G所以创建线程的数目是恒定的。

然而所有的线程都有自己的栈空间和一组寄存器包括PC寄存器。

二、进程:

 操作系统分配资源的基本单位,在Linux上创建一个进程,会调用fork()函数,Linux上独有的

写时拷贝技术,大大的提升了创建进程的时间,Linux上0号进程就是专门提供用来写时拷贝的init;

在Windows上会调用create_process()函数,重新创建,所以时间会稍微慢一点。

进程的必要条件:task_struct、text、独立的用户空间,独立的内核空间。

内核线程:与进程相比,没有独立的用户空间,用kernel_thread()创建;

用户线程:与进程相比,用户空间是共享的,用pthread_create()创建。

总结:Linux上调度的基本单位是进程,多线程的优点是数据共享,交互,节省

大量的时间,所以多线程不适用于Linux;Windows上调度的基本单位是线程,

线程切换快,进程只是容器用来装载线程。