首页 > 编程语言 > 详细

进程和线程

时间:2017-07-20 23:22:45      阅读:258      评论:0      收藏:0      [点我收藏+]

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上调度的基本单位是线程,

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

 

进程和线程

原文:http://www.cnblogs.com/waiting999/p/7214809.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!