图解分析Javaweb进程与线程

 更新时间:2022年03月02日 15:12:45   作者:/少司命  
这篇文章主要介绍了Javaweb进程与线程的知识,本篇文章通过简要的案例,讲解了它的基础原理与使用,以下就是详细内容,需要的朋友可以参考下

一、认识进程

1,线程初识

一个可执行程序运行起来,就可以看作是一个进程

进程也是操作系统分配资源的最小单元

一个进程在内核中都会对应一个PCB对象

一个线程就是一个 "执行流". 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 "同时" 执行 着多份代码.

2,进程属性

进程id:身份表示

一组内存指针:指向进程运行时依赖的指令和数据在内存的哪个位置

进程状态:是正在运行,还是正在休眠

进程优先级:这个进程是优先上CPU执行还是放在后面上

进程的上下文:保存了上次进程在CPU上执行的进度,以便下次进程上CPU的时候能够继续执行

进程的记账信息:记录了进程在CPU上一共执行了多长时间,通过这个时间来限制不要让某个进程霸占CPU太久,导致其他进程无法执行

从微观上看,一个CPU同一个时刻只能执行一个线程命令

进程太多,CPU太少

通过“并发”的方式,让CPU快速调度,微观上仍然是串行,但调度上极快,宏观上就感觉是多个进程齐头并进

二、为什么要有线程

首先, "并发编程" 成为 "刚需".

单核 CPU 的发展遇到了瓶颈. 要想提高算力, 就需要多核 CPU. 而并发编程能更充分利用多核 CPU 资源. 有些任务场景需要 "等待 IO", 为了让等待 IO 的时间能够去做一些其他的工作, 也需要用到并发编程.

其次, 虽然多进程也能实现 并发编程, 但是线程比进程更轻量.

创建线程比创建进程更快.

销毁线程比销毁进程更快.

调度线程比调度进程更快.

三、认识线程与进程的区别

如果把一个进程看作是一个工厂,线程就是工厂中的若干流水线

线程其实包含在进程中

一个进程可能有多个线程

每一个线程都有一段自己要执行的逻辑(命令),每一个线程都是一个独立的“执行流”

同一个进程中的很多线程之间,是共享一些资源

四、Linux中的线程

1,内核态与用户态

假如你去银行存款,得在窗口和柜员交互

存款的过程:

1、先和柜员沟通,要存多少钱,存在那个账户上

2、把卡和钱交给柜员

以上都是能感知的到动作,相当于代码在用户态执行

3、柜员拿到东西在电脑上操作

以上是用户感知不到的,相当于代码在内核态执行

用户态:权限相对比较小,只能进行一些低风险的操作

内核态:比用户态高很多

2,PCB描述线程

 内核只认识PCB

一个线程和一个PCB对应

一个进程可能有多个PCB

这三个PCB就对应了java.exe这个进程的三个线程,内核中也把这若干从属同一个进程称为“线程组”,类似于MySql中的多对一

五、多种类型

以一个比较形象的例子,吃苹果,100苹果分着吃

线程:分配资源,房间+桌子

进程:调度让小朋友去吃苹果

1,单进程单线程

2,多进程单线程

3,单进程多线程

4,多进程多线程

5,进程中线程分析

一个线程中最多有多少个线程

1,CPU的个数有关

2,和线程执行的任务的类型也有关

        CPU密集型:程序一直在执行计算任务

        IO密集型:主要进行输入输出的操作

多个线程去抢夺一个资源可能造成线程不安全

一个线程如果出现抛出异常,并且没有很好的处理这个异常,整个进程就会被终止,其他线程无法工作

到此这篇关于图解分析Javaweb进程与线程的文章就介绍到这了,更多相关Javaweb 进程 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java工程师进阶之MyBatis延迟加载的使用

    java工程师进阶之MyBatis延迟加载的使用

    本文是java工程师进阶篇,主要介绍了java应用开发中MyBatis延迟加载及如何使用,有需要的朋友 可以借鉴参考下,希望能够有所帮助
    2021-09-09
  • 详解spring cloud整合Swagger2构建RESTful服务的APIs

    详解spring cloud整合Swagger2构建RESTful服务的APIs

    这篇文章主要介绍了详解spring cloud整合Swagger2构建RESTful服务的APIs,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Java中使用MyBatis-Plus操作数据库的实例

    Java中使用MyBatis-Plus操作数据库的实例

    本文主要介绍了Java中使用MyBatis-Plus操作数据库的实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-02-02
  • Java面试题冲刺第十五天--设计模式

    Java面试题冲刺第十五天--设计模式

    这篇文章主要为大家分享了最有价值的三道关于设计模式的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Java 带参数与带返回值的方法的定义和调用

    Java 带参数与带返回值的方法的定义和调用

    在java中,方法就是用来完成解决某件事情或实现某个功能的办法。方法实现的过程中,会包含很多条语句用于完成某些有意义的功能——通常是处理文本,控制输入或计算数值,这篇文章我们来探究一下带参数与带返回值的方法的定义和调用
    2022-04-04
  • jpa多条件查询重写Specification的toPredicate方法

    jpa多条件查询重写Specification的toPredicate方法

    这篇文章主要介绍了多条件查询重写Specification的toPredicate方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • SpringBoot对静态资源的映射规则详解

    SpringBoot对静态资源的映射规则详解

    在Web应用中会涉及到大量的静态资源,例如 JS、CSS和HTML等,我们知道,Spring MVC 导入静态资源文件时,需要配置静态资源的映射,但在 SpringBoot 中则不再需要进行此项配置,因为SpringBoot已经默认完成了这一工作,本文给大家介绍了SpringBoot对静态资源的映射规则详
    2024-12-12
  • 教你如何编写简单的网络爬虫

    教你如何编写简单的网络爬虫

    实际的爬虫是从一系列的种子链接开始。种子链接是起始节点,种子页面的超链接指向的页面是子节点(中间节点),对于非html文档,如excel等,不能从中提取超链接,看做图的终端节点
    2013-10-10
  • java notify和notifyAll的对比

    java notify和notifyAll的对比

    这篇文章主要介绍了 java notify和notifyAll的对比的相关资料,需要的朋友可以参考下
    2017-02-02
  • Maven pom.xml文件获取当前时间戳方式

    Maven pom.xml文件获取当前时间戳方式

    这篇文章主要介绍了Maven pom.xml文件获取当前时间戳方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论