多线程概述

文章目录

  • 线程是什么
  • 线程有什么作用
  • 线程和进程的区别
  • 多线程相较于进程优势

在Java这个圈子中,多进程用的并不多,因为进程是一个重量级操作,进程是资源分配的基本单位,申请资源是一个比较消耗时间的操作.

线程是什么

  • 线程是一个独立的执行流,可以被独立调度到CPU上执行
    • 线程是操作系统调度执行的基本单位
    • 每个线程之间都可以按照顺讯执行自己的代码.
    • 多个线程之间并发执行着多份代码.

在这里插入图片描述

    举个例子,市面上有很多多线程下载器,如IDM,NDM等.这些多线程下载器在下载文件时,就可以把一个任务分为多个子任务,然后让每个线程完成一个子任务,每一个线程都是一个独立的执行流.这样做就可以增加下载速度.

    我们补充一点,线程是系统调度执行的最小单位,在线程执行过程中,操作系统中就不会再有进程这样的概念了,每个线程可以独立的进行调度。而线程也一样拥有PCB(Process Control Blob),只不过其中的进程标识符pid,内存指针,和文件描述符表是共用的,因为线程共享进程的资源。但是线程的PCB中状态、优先级、上下文、记账信息等影响调度执行的属性私有的(各不相同)。
在这里插入图片描述

线程有什么作用

    单核心CPU发展遇到瓶颈,通过增加CPU核心,提高算力,而并发编程就能够充分利用CPU的多个核心,从而将CPU的性能发挥到极致。在有些IO场景下,CPU就会有“闲置”,并发就能充分利用这部分空闲的CPU资源。总之,线程是用来实现高并发场景的,而高并发能提高程序执行的效率
    那么进程也能实现高并发场景,我们在Java中为什么不推荐使用多进程编程,而推荐使用多线程编程呢?那是因为虽然多进程也能实现 并发编程, 但是线程比进程更轻量进程是操作系统资源分配的最小单位,而多进程编程,会频繁的创建、销毁、调度进程,而这其中最大的时间消耗其实是申请资源,分配内存/硬盘是一个重量级的操作。
    主要是由于操作系统要管理大量的空闲的内存和硬盘资源。虽然操作系统中使用了一定的数据结构,把这些空间管理的还不错,但是即使如此,申请资源仍然还是一个低效操作。如果只申请一次资源,开销也就还不错,但如果频繁的申请和释放资源,开销就不可忽视了。

线程也叫作轻量级进程

  • 创建线程比创建进程更快
  • 销毁线程比销毁进程更快
  • 调度线程比调度进程更快

    虽然线程比进程更加轻量化,但是为了更加轻量(开销小,效率高)于是又引入了线程池(ThreadPool) 和 “协程”(Coroutine)这样的概念来进一步提高效率,我们后面会介绍到。

线程和进程的区别

  1. 本质区别在于,每个进程都拥有自己的一整套资源,而线程则是共享资源,开销小,更加轻量化
    • 内存指针和文件描述符表维护的进程创建时申请的内存和硬盘资源
  2. 进程包含线程,一个进程至少有一个线程即主线程。
  3. 进程是系统资源分配的最小单位,而线程则是系统调度的最小单位
  4. 进程之间具有独立性,一个进程崩溃,不会影响其他进程,而线程之间共享资源,一个线程崩溃可能会影响到其他的线程,严重的还可能会让线程所在的进程崩溃

多线程相较于进程优势

多线程在一些场景下是可以大大提高运行效率的。如果现在要下载一个100G大小的文件,我们可以怎么做呢?

方案一:将下载任务分成多个子任务,交给多个下载器下载.(多进程方式)
在这里插入图片描述
这种方式虽然可以提高下载速度,但是开启多个下载器,在操作系统中创建了多个进程,申请了更多的资源,开销比较大.

    方案二: 在一个下载器中开启多线程下载(多线程)
在这里插入图片描述
相较于多进程的方式,这种多线程的方式,复用了进程申请的资源,降低了申请资源上的开销,是一种更加轻量化的方案

    补充一点,刚开始创建进程时,主线程会随着进程一起被创建出来,这个时候也是有着一定的申请资源的开销的,但是这个开销并不会算在线程头上,而是记在了进程头上,而后面如果继续创建线程,则会复用进程的资源,开销也自然就小了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/196141.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bean实例化的基本流程

Spring容器在进行初始化时&#xff0c;会将xml配置的<bean>的信息封装成一个BeanDefintion对象&#xff0c;所有的BeanDefintion存储到BeanDefintionMap的Map集合中去&#xff0c;Spring框架对该Map进行遍历&#xff0c;使用反射创建Bean实例对象&#xff0c;创建好的Bea…

Dockerfile自定义镜像以及案例分析

文章目录 一、Dockerfile自定义镜像1.1 镜像结构1.2 Dockerfile语法 二、构建Java项目三、基于java8构建java四、小结 一、Dockerfile自定义镜像 常见的镜像在DockerHub就能找到&#xff0c;但是我们自己写的项目就必须自己构建镜像了。 而要自定义镜像&#xff0c;就必须先了…

【开源】基于Vue.js的高校宿舍调配管理系统

项目编号&#xff1a; S 051 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S051&#xff0c;文末获取源码。} 项目编号&#xff1a;S051&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能需求2.1 学生端2.2 宿管2.3 老师端 三、系统…

高防CDN为什么可以防DDOS攻击

CDN的全称是ContentDeliveryNetwork&#xff0c;即内容分发网络&#xff0c;顾名思义&#xff0c;它是一个分布式节点网络(也称为边缘服务器)&#xff0c;CDN节点具有缓存内容的功能&#xff0c;使用户可以在不获取源服务器数据的情况下就近获取所需内容&#xff0c;提高客户访…

《微信小程序开发从入门到实战》学习二十

3.3 开发创建投票页面 3.3.8 使用icon图标文件 原来已经实现了投票选项的增加和修改功能&#xff0c;现在还差删除。现在为每一个选项增加删除按钮&#xff0c;可以以通过icon图标组件实现。 icon常用属性如下&#xff1a; type icon的类型&#xff0c;有success、s…

6 Redis的慢查询配置

1、redis的命令执行流程 redis的慢查询只针对步骤3 默认情况下&#xff0c;慢查询的阈值是10ms 在配置文件中进行配置 //这个参数的单位为微秒 //如果将这个值设置为负数&#xff0c;则会禁用慢日志功能 //如果将其设置为0&#xff0c;则会强制记录每个命令 slowlog-log-slow…

数据结构【DS】树与二叉树的应用

哈夫曼树 树的带权路径长度最小的二叉树WPL 路径长度【边数】 * 结点权值n个叶结点的哈夫曼树共有 2n-1 个结点 哈夫曼树的任意非叶结点的左右子树交换后仍是哈夫曼树对同一组权值&#xff0c;可能存在不同构的多棵哈夫曼树&#xff0c;但树的带权路径长度最小且唯一哈夫曼树…

斯坦福机器学习 Lecture2 (假设函数、参数、样本等等术语,还有批量梯度下降法、随机梯度下降法 SGD 以及它们的相关推导,还有正态方程)

假设函数定义 假设函数&#xff0c;猜一个 x->y 的类型&#xff0c;比如 y ax b&#xff0c;随后监督学习的任务就是找到误差最低的 a 和 b 参数 有时候我们可以定义 x0 1&#xff0c;来让假设函数的整个表达式一致统一 如上图是机器学习中的一些术语 额外的符号&#xf…

基于灰色神经网络的预测算法——订单需求预测

大家好&#xff0c;我是带我去滑雪&#xff01; 灰色系统理论的不确定性处理与神经网络的非线性建模相结合&#xff0c;有望更好地处理实际问题中的不确定性和复杂性。本期使用灰色神经网络实现预测冰箱订单需求。 一、问题背景与模型建立 &#xff08;1&#xff09;灰色理论…

测试Bard和ChatGPT关于双休的法规和推理

Bard是试验品&#xff0c;chatgpt是3.5版的。 首先带着问题&#xff0c;借助网络搜索&#xff0c;从政府官方网站等权威网站进行确认&#xff0c;已知正确答案的情况下&#xff0c;再来印证两个大语言模型的优劣。 想要了解的问题是&#xff0c;在中国&#xff0c;跟法定工作…

达标进度条

1.效果 1. 2.代码与使用 1.自定义组合控件 kotlin import android.annotation.SuppressLint import android.content.Context import android.graphics.drawable.Drawable import android.util.AttributeSet import android.view.Gravity import android.view.LayoutInflat…

进程之理解进程的概念

你必须非常努力&#xff0c;才能看起来毫不费力。文章目录 进程的基本概念描述进程——pcbtest_struct pcb的一种task_struct 内容分类 组织进程查看进程通过系统调用获取进程标示符总结 进程的基本概念 课本概念&#xff1a;进程是一个执行实列&#xff0c;正在执行的程序等。…