进程和线程

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

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值