线程实现的两种方式——用户空间和内核中

1、在用户空间中实现线程

(1)特点:内核对线程包一无所知。从内核角度考虑,就是按正常的方式管理,即单线程进程(存在运行时系统)

(2)优点

用户级线程包可以在不支持线程的操作系统上实现

保存线程状态的过程和调用程序都只是本地过程,故启动它们比进程内核调用效率更高

不需要陷阱,不需要上下文切换,也不需要对内存高速缓存进行刷新,使得线程调用非常快捷

(3)缺点

线程发生I/O或页面故障引起的阻塞时,如果调用阻塞系统调用则内核由于不知道有多线程的存在,而会阻塞整个进程从而阻塞所有线程

一个单独的进程内部,没有时钟中断,所以不可能用轮转调度的方式调度线程

2、在内核中实现线程

(1)特点

当某个线程希望创建一个新线程或撤销一个已有线程时,它进行一个系统调用

(2)优点

所有能够阻塞线程的调用都以系统调用的形式实现,代价可观

当一个线程阻塞时,内核根据选择可以运行另一个进程的线程,而用户空间实现的线程中,运行时系统始终运行自己进程中的线程

说明:由于内核创建线程代价大,故有线程回收

3、信号是发给进程而不是线程的,当一个信号到达时,应该由哪一个线程处理它?线程可以“注册”它们感兴趣的信号。但如果两个或更多的线程注册了相同的信号,会发生什么呢?


下面是线程包实现图



4、混合实现

在这种模型中,每个内核级线程有一个可以轮流使用的用户级线程集合


补充:在用户级线程中,每个进程里的线程表由运行时系统管理。当一个线程转换到就绪状态或阻塞状态时,在该线程表中存放重新启动该线程所需的信息,与内核在进程表中存放的进程的信息完全一样


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值