关于进程、线程、协程的概念以及Java中的应用

这篇具有很好参考价值的文章主要介绍了关于进程、线程、协程的概念以及Java中的应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

进程、线程、协程

本文将从“操作系统”、“Java应用”上两个角度来探究这三者的区别。

一、进程

在我本人的疑惑中,我有以下3个问题。

1.1为什么要引入进程?

在“多道程序环境下”,允许多个程序并发执行,此时它们将失去封闭性,并具有间断性以及不可再现性的特征,因此需要引入进程的概念。

1.2什么是进程?进程由什么构成。

进程是程序执行的过程 ,包括了动态创建、调度和消亡的的整个过程,进程是程序资源管理的最小单位。好比下列汇编代码代码所示,包含对程序资源的调度。

_add_a_and_b:
   push   %ebx
   mov    %eax, [%esp+8] 
   mov    %ebx, [%esp+12]
   add    %eax, %ebx 
   pop    %ebx 
   ret  

_main:
   push   3
   push   2
   call   _add_a_and_b 
   add    %esp, 8
   ret

进程由三部分组成。

  • 进程控制块(PCB),是进程存在的唯一标识,
  • 程序段
  • 数据段

1.3Liunx进程实现

Linux 并没有为线程准备特定的数据结构,因为 Linux只有task_struct这一种描述进程的结构体。在内核看来只有进程而没有线程,线程调度时也是当做进程来调度的。Linux所谓的线程其实是与其他进程共享资源的轻量级进程

为什么说是轻量级呢?在于它只有一个最小的执行上下文和调度程序所需的统计信息,它只带有进程执行相关的信息,与父进程共享进程地址空间

二、线程

2.1线程是什么?

线程是操作操作系统能够运行运算调度的最小单位。线程被包含在进程之中,是进程中的实际运作的单位,一个进程内可以包含多个线程,线程是资源调度的最小单位。

在Liunx中,线程没有特定的数据结构,如何区别开来线程与进程的创建呢,这根据创建时参数的不同来决定,例如线程只有一个最小的执行上下文和调度程序所需的统计信息。

2.2线程拥有什么?

同一进程中的多条线程共享该进程中的 全部系统资源,如

  • 虚拟地址空间
  • 文件描述符号
  • 信号处理

但是同一个进程的不同线程也有各自的信息,如

  • 调用栈
  • 寄存器环境
  • 线程本次存储

3.3线程分类

3.4 Java如何启动一个线程

start– > start0 …..Native方法(由JVM中的c++调用)----> Liunx内核的 pthread_create方法

三、协程

3.1 既然有多线程操作,为什么还要引入协程?

操作系统在线程等待IO的时候,会阻塞当前线程,切换到其他线程,这样在当前线程等待IO的过程中,其他线程可以继续执行。这样操作在系统线程较少的时候没有多大问题,可是当线程数量非常多的时候,却产生了问题。一是系统线程会占用非常多的内存空间,二是过多的线程切换占用大量的系统时间

而协程刚好可以解决上述的两个问题。

3.2 协程的概念

协程就是把原来每个线程分别负责的任务压缩到少量线程中,每个线程中用协程来实现原来线程级别的任务,因为包装了系统io导致协程内遇到io不会导致当前线程被挂起,以起到最大化利用时间片,减少线程调度开销的作用。

协程运行在线程之上,当一个协程运行完成后,可以选择主动让出,让另一个协程运行在当前线程之上。

  1. 协程并没有增加线程数量,只是在线程的基础之上通过分时复用的方式运行多个协程
  2. 协程的切换在用户态完成,切换的代价比线程从用户态到内核台的代价小很多。

3.3 协程的注意事项

实际上协程并不是什么银弹,协程只有在等待IO的过程中才能重复利用线程,线程在等待IO的过程中会陷入阻塞状态。

假设协程运行在线程之上,并且协程调用了一个阻塞IO操作,这时候会发生什么?实际上操作系统并不知道协程的存在,它只知道线程,因此在协程调用阻塞IO操作的时候,操作系统会让线程进入阻塞状态,当前的协程和其它绑定在该线程之上的协程都会陷入阻塞而得不到调度,这往往是不能接受的。

3.4 Java中的应用--虚拟线程

Java 19 已经预2022年9月20日发布,虚拟线程是其中的一项预览功能。

虚拟线程是轻量级的线程,它们不与操作系统线程绑定,而是由 JVM 来管理。它们适用于“每个请求一个线程”的编程风格,同时没有操作系统线程的限制。我们能够创建数以百万计的虚拟线程而不会影响吞吐。这与 Go 编程语言(Golang)的协程(如goroutines)非常相似。文章来源地址https://www.toymoban.com/news/detail-480283.html

Thread.startVirtualThread(() -> {
    System.out.println("Hello, Project Loom!");
});

到了这里,关于关于进程、线程、协程的概念以及Java中的应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java多线程】关于多线程的一些案例 —— 单例模式中的饿汉模式和懒汉模式以及阻塞队列

    目录 1、单例模式 1.1、饿汉模式 2.1、懒汉模式  2、阻塞队列 2.1、BlockingQueue 阻塞队列数据结构 对框架和设计模式的简单理解就是,这两者都是“大佬”设计出来的,让即使是一个代码写的不太好的“菜鸡程序员”也能写出还可以的代码。 设计模式也可以认为是对编程语言语

    2024年03月23日
    浏览(90)
  • 重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar)

    重写Sylar基于协程的服务器系列: 重写Sylar基于协程的服务器(0、搭建开发环境以及项目框架 || 下载编译简化版Sylar) 重写Sylar基于协程的服务器(1、日志模块的架构) 重写Sylar基于协程的服务器(2、配置模块的设计) 重写Sylar基于协程的服务器(3、协程模块的设计) 重写

    2024年04月26日
    浏览(34)
  • 操作系统进程线程(一)—进程线程协程区别、多进程多线程、进程调度算法、进程线程通信

    定义上 进程: 资源分配和拥有 的基本单位,是调度的基本单位。 运行一个可执行程序会创建一个或者多个进程;进程就是运行起来的程序 线程:程序 执行 基本单位,轻量级进程。 每个进程中都有唯一的主线程 ,主线程和进程是相互依赖的关系。 协程: 用户态 的轻量级

    2024年02月01日
    浏览(54)
  • 什么是进程、线程、协程

    我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序则是具有某种功能的程序,程序是运行于操作系统之上的。 进程是一个具有一定独立功能的程序在一个数据集上

    2024年02月13日
    浏览(36)
  • 进程,线程,协程

    1、进程 进程是具有一定独立功能的程序关于某个​​数据集​​合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。每个进程都有自己的独立内存空间,不同进程通过进程间通信来通信。由于进程比较重量,占据独立的内存,所以上下文进程间的切换开销

    2024年02月11日
    浏览(44)
  • 线程 进程 协程 区别

    在并发编程中,\\\"线程\\\"和\\\"协程\\\"都是用于实现并发执行的概念,但它们有一些重要的区别。 线程(Thread): 线程是操作系统的概念,是操作系统调度的最小执行单位,是进程中的一个实体,表示程序执行的基本单元。 线程由操作系统内核调度和管理,它拥有自己的执行上下文

    2024年02月04日
    浏览(63)
  • 【Linux操作系统】Linux中的进程和线程的概念、区别和实现的细节

    在Linux中,进程和线程是操作系统中两个重要的执行单位。它们是对程序运行时的抽象概念,用于管理和调度计算机资源。 进程是正在运行的程序的实例。它是操作系统分配资源和调度执行的基本单位。每个进程都有自己独立的内存空间,包含代码、数据、堆栈等。进程还包

    2024年02月14日
    浏览(52)
  • Python多任务教程:进程、线程、协程

    进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。进程一般由程序、数据集合和进程控制块三部分组成。程序用于描述进

    2024年02月12日
    浏览(38)
  • 1.Unity协程、进程、线程的区别

    1、 进程 拥有自己独立的堆和栈,堆和栈都不共享,进程由操作系统调度。 2、 线程 有自己独立的栈和共享的堆,栈不共享,堆共享,标准的线程也是由系统调度。 3、 协程 有自己独立的栈和共享的堆,栈不共享,堆共享,协程由程序员在协程的代码里面调度。 协程多与线

    2024年02月03日
    浏览(43)
  • Linux的进程,协程和线程

    Linux的进程、协程和线程是计算机科学中重要的概念,它们在操作系统和并发编程中发挥着关键的作用。让我们逐个详解这些概念,并讨论它们之间的关系。 进程是操作系统中的一个执行单元,它包含了程序执行所需的所有资源,如内存空间、文件描述符、寄存器等。 进程是

    2024年01月23日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包