IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 进程与线程——线程部分1 -> 正文阅读

[Java知识库]进程与线程——线程部分1

1.线程的概念

在早期的操作系统中都是以进程作为独?运?的基本单位,直到后?,计算机科学家们?提出了更?的能独?运?的基本单位,也就是线程。

2.多线程模型

如图所示,对于一个进程的多个线程,每个线程都具有自己独立内存空间,这样在每个线程从进程的共享内存中读取数据后,只能操作自己内存空间中的那一部分数据,这样就不会在多线程操作时产生冲突问题。

3.多线程的优点和缺点

1)优点:
?个进程中可以同时存在多个线程;
各个线程之间可以并发执?;
各个线程之间可以共享地址空间和?件等资源;
2)缺点:
当进程中的?个线程崩溃时,会导致其所属进程的所有线程崩溃。

?4.线程的上下文切换

只有一个线程时,线程的上下文切换与进程的上下文切换相同。(参考我的上一篇博文)

当有多个线程时,线程之间上下文切换时,由于多线程共享了进程的内存空间,因此每个线程只需要保存自己线程内存中对其他线程不共享的数据和指令行即可,其余部分不需要保存。待切换回来时,需要对上一个线程中保存的数据和指令行进程重新加载。

也就是说线程的上下文开销要小于进程的上下文开销

5.线程的实现方式

1)内核线程,内核线程由系统内核创建,并且由内核进行管理的线程。该线程的创建和销毁均需要切换会内核态进行完成,开销较大。

内核线程由操作系统负责管理,线程控制块存在于内核空间中,线程的创建,终止,调度等过程均需要由操作系统来直接负责。

?内核-> 进程表 -> 进程控制块 -> 线程表 -> 线程控制块 -> 用户线程

内核线程的优点:

1.线程的创建调度销毁由操作系统来负责,可以根据需要打断当前的线程,进行线程上下文的切换。

2.时间片的分配以线程为单位来进行,更为灵活。

内核线程的缺点:

线程的创建,销毁,调度过程中需要切换到内核态,开销较大。

2)用户线程,该部分由用户级的线程库创建,其调度,销毁等过程均不需要操作系统的参与。其与内核线程是多对一的关系。即一个内核线程对应多个用户线程。

内核 -> 进程表 -> 进程控制块 -> 线程控制块 -> 多个用户线程

?

用户线程的优点如下:

1.进程控制块PCB由用户级线程库维护,可用于不支持线程技术的操作系统。

2.用户线程之间的切换由用户级线程库来进行维护,不需要切换到内核态,大大节省了时间。

缺点如下:

1.由于操作系统不参与线程调度,如果一个线程发起了系统调用而阻塞,则用户级线程库没有处理这类阻塞的能力,会导致所有用户线程均无法继续执行。

2.线程之间的切换只能等到当前处于运行状态的线程交出执行权之后才可以,因为操作系统不参与线程调度,因此也无法打断当前正在运行的线程。

3.因用户级线程库没有打断线程的能力,因此,时间片是按照进程为单位进行分配,这样的分配方式对于进程下的所有线程来说未必是最优解。

3)轻量级进程

轻量级进程(Light-weight process , LWP)是内核?持的?户线程,?个进程可有?个或多个 LWP,每个 LWP 是跟内核线程?对?映射的,也就是 LWP 都是由?个内核线程?持

即一个内核线程对应一个LWP,一个LWP又可以对应多个用户线程,用户线程的创建,调度,销毁由LWP来进行,由于LWP与内核线程对应,其可以实现线程中断和中断恢复,创建LWP时需要切换回内核态,但是由LWP创建用户线程的时候不需要,一个LWP可以创建多个用户线程,效率较内核线程的创建方式大大提高。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:07:02  更:2021-12-06 15:08:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:37:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码