Java线程模型

操作系统两种执行态概念

操作系统分为用户态和核心态
1.核心态,属于系统核心级的,拥有调用系统组件的功能,进程在运行过程中,会执行系统调用的时候,会进入内核运行,此时就称为内核态
2.用户态,属于系统核心外的级别,进程执行自己的代码,也不会进行系统级别调用,就是用户态。

一、简介

线程在操作系统中分为用户线程和内核线程;

Java的线程基本都是用户线程;

内核线程与用户线程之间存在一定的关系,这种关系通常是3种:多对一模型、一对一模型、多对多模型。

二、模型介绍

1、多对一模型

多对一模型,又名用户级线程模型,就是多个用户线程对应到一个内核线程上,线程的创建、调度、同步的所有细节全部都交给用户空间线程库来处理。

优点:
	1.用户线程的很多操作对内核来说都是透明的,不需要用户态和内核态的频繁切换,使线程的创建、调度、同步非常快;

缺点:
	1.多个用户线程对应一个内核线程,如果其中一个线程阻塞,其他用户线程也无法执行;
	2.内核不知道用户态用哪些线程,无法拥有内核线程一样的完整调度、优先级等

python使用的这种方案

2、一对一模型

一对一模型,又名内核级线程模型,就是一个用户现场对应一个内核线程,内核负责每个线程的调度,可以调度到其他处理器上面。

优点:实现简单

缺点:
	1.对用户线程的大部分操作都会映射到内核线程上,引起用户态和内核态的频繁切换;
	2.内核为每个线程都映射调度的实体,如果系统出现大量线程,会对系统性能有影响(频繁切换线程等);

Java使用的一对一线程模型

3、多对多模型

多对多模型,又叫两级线程模型,它吸收了前两种线程模型的优点,又尽量规避它们的缺点

这个模型的用户线程和内核线程是多对多的关系(m个用户线程和n个内核线程,通常m >= n)的映射模型

多用户线程可以绑定在多个内核线程中,但是一条用户同时只能绑定在一个内核线程上,
如果当前内核线程失去了CPU,其他用户线程可以绑定到其他内核线程上。
优点:
	1.兼具多对一模型的轻量;
	2.由于对应了多个内核线程,一个用户现场阻塞时候,其他用户线程仍然可以执行;
	3.由于对应多个内核线程,则可以实现较完整的调度、优先级等;

缺点:
	实现复杂!

Go语言使用这种方式

三、总结

1.线程分为用户线程和内核线程;
2.线程模型分为多对一模型、一对一模型、多对多模型;
3.操作系统一般只实现一对一模型;
4.Java使用一对一模型,他的所有线程均会对应自己的内核线程,调度全部由系统来处理;
5.Go使用多对多模型,高并发给力啊,详细看上面;
6.python使用多对一线程,优缺点也可以看看上面;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值