图解分析Javaweb进程与线程

目录
  • 一、认识进程
    • 1,线程初识
    • 2,进程属性
  • 二、为什么要有线程
  • 三、认识线程与进程的区别
  • 四、Linux中的线程
    • 1,内核态与用户态
    • 2,PCB描述线程
  • 五、多种类型
    • 1,单进程单线程
    • 2,多进程单线程
    • 3,单进程多线程
    • 4,多进程多线程
    • 5,进程中线程分析

一、认识进程

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 进程 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java Web项目中使用Socket通信多线程、长连接的方法

    很多时候在javaweb项目中我们需要用到Socket通信来实现功能,在web中使用Socket我们需要建立一个监听程序,在程序启动时,启动socket监听.我们的应用场景是在java项目中,需要外接如一个硬件设备,通过tcp通信,获取设备传上来的数据,并对数据做回应. 先看一下web的监听代码: import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; public class

  • 论Java Web应用中调优线程池的重要性

    不论你是否关注,Java Web应用都或多或少的使用了线程池来处理请求.线程池的实现细节可能会被忽视,但是有关于线程池的使用和调优迟早是需要了解的.本文主要介绍Java线程池的使用和如何正确的配置线程池. 单线程 我们先从基础开始.无论使用哪种应用服务器或者框架(如Tomcat.Jetty等),他们都有类似的基础实现.Web服务的基础是套接字(socket),套接字负责监听端口,等待TCP连接,并接受TCP连接.一旦TCP连接被接受,即可从新创建的TCP连接中读取和发送数据. 为了能够理解上述流

  • java使用socket实现一个多线程web服务器的方法

    除了服务器类,还包括请求类和响应类 请求类:获取客户的HTTP请求,分析客户所需要的文件 响应类:获得用户请求后将用户需要的文件读出,添加上HTTP应答头.发送给客户端. 服务器处理类 package com.lp.app.webserver; import java.io.*; import java.net.*; //使用Socket创建一个WEB服务器,本程序是多线程系统以提高反应速度. class WebServer { public static String WEBROOT = "&

  • 图解分析Javaweb进程与线程

    目录 一.认识进程 1,线程初识 2,进程属性 二.为什么要有线程 三.认识线程与进程的区别 四.Linux中的线程 1,内核态与用户态 2,PCB描述线程 五.多种类型 1,单进程单线程 2,多进程单线程 3,单进程多线程 4,多进程多线程 5,进程中线程分析 一.认识进程 1,线程初识 一个可执行程序运行起来,就可以看作是一个进程 进程也是操作系统分配资源的最小单元 一个进程在内核中都会对应一个PCB对象 一个线程就是一个 "执行流". 每个线程之间都可以按照顺讯执行自己的代码.

  • 详细介绍 进程、线程和协程的区别

    详解 进程.线程和协程的区别 首先,给出"进程.线程和协程"的特点: 进程:拥有自己独立的堆和栈,既不共享堆,也不共享栈,进程由操作系统调度: 线程:拥有自己独立的栈和共享的堆,共享堆,不共享栈,标准线程由操作系统调度: 协程:拥有自己独立的栈和共享的堆,共享堆,不共享栈,协程由程序员在协程的代码里显示调度. 接下来,以一个形象的例子,进一步讲述"进程.线程和协程"三者之间的区别: 假设有一个单核的操作系统,系统上没有其它的程序需要运行,现有两个线程 A 和 B,A

  • 深入浅析WinForm 进程、线程及区别介绍

    一.进程 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动. 它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体. Process 类,用来操作进程. 命名空间:using System.Diagnostics; Process.Start("calc"); //打开计算器 Process.Start("mspaint"); //打开画图 Process.Start("iexplore" , "http://www.

  • 详解Android进程和线程

    写在前面的话 一个Android应用就是一个Linux进程,每个应用在各自的进程中运行,互不干扰,比较安全. 一个应用对应一个主线程,就是通常所说的UI线程,android遵守的就是单线程模型,所以说Ui操作不是线程安全的并且这些操作必须在UI线程中执行. 本文是对官方文档的翻译,原文链接:https://developer.android.com/guide/components/processes-and-threads.html 概述 当某个应用组件启动且该应用没有运行其他任何组件时,An

  • 简述Python中的进程、线程、协程

    进程.线程和协程之间的关系和区别也困扰我一阵子了,最近有一些心得,写一下. 进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度. 线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度(标准线程是的). 协程和线程一样共享堆,不共享栈,协程由程序员在协程的代码里显示调度. 进程和其他两个的区别还是很明显的. 协程和线程的区别是:协程避免了无意义的调度,由此可以提高性能,但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力. Pyt

  • java中进程与线程_三种实现方式总结(必看篇)

    一:进程与线程 概述:几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是一个线程. 进程:进程是指处于运行过程中的程序,并且具有一定的独立功能.进程是系统进行资源分配和调度的一个单位.当程序进入内存运行时,即为进程. 进程的三个特点: 1:独立性:进程是系统中独立存在的实体,它可以独立拥有资源,每一个进程都有自己独立的地址空间,没有进程本身的运行,用户进程不可以直接访问其他进程的地址空间. 2:

  • 简述Java中进程与线程的关系_动力节点Java学院整理

    概述 进程与线程,本质意义上说, 是操作系统的调度单位,可以看成是一种操作系统 "资源" .Java 作为与平台无关的编程语言,必然会对底层(操作系统)提供的功能进行进一步的封装,以平台无关的编程接口供程序员使用,进程与线程作为操作系统核心概念的一部分无疑亦是如此.在 Java 语言中,对进程和线程的封装,分别提供了 Process 和 Thread 相关的一些类.本文首先简单的介绍如何使用这些类来创建进程和线程,然后着重介绍这些类是如何和操作系统本地进程线程相对应的,给出了 Java

  • C#网络编程基础之进程和线程详解

    在C#的网络编程中,进程和线程是必备的基础知识,同时也是一个重点,所以我们要好好的掌握一下. 一:概念 首先我们要知道什么是"进程",什么是"线程",好,查一下baike. 进程:是一个具有一定独立功能的程序关于某个数据集合的一次活动.它是操作系统动态执行的基本单元, 在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元. 线程:是"进程"中某个单一顺序的控制流. 关于这两个概念,大家稍微有个印象就行了,防止以后被面试官问到. 二:进程

  • C#获取进程或线程相关信息的方法

    本文实例讲述了C#获取进程或线程相关信息的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace ConsoleApp { class ProcessDo { /// <summary> /// 获取进程相关信息 /// </summary> pub

  • Linux中进程和线程的对比与区别

    Linux中进程和线程的对比与区别 1.概念 进程:正在运行中的程序. 线程:进程中的一条执行路径. 2.区别 (1)通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源.在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位. (2)线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定.线程的

随机推荐