进程和线程
Posted 渔腻
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程和线程相关的知识,希望对你有一定的参考价值。
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上调度的基本单位是线程,
线程切换快,进程只是容器用来装载线程。
以上是关于进程和线程的主要内容,如果未能解决你的问题,请参考以下文章