多线程的概念

点击链接返回标题->


什么是进程?

进程(Process),是程序的基本执行实体

在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;

在当代面向线程设计的计算机结构中,进程是线程的容器

程序是指令、数据及其组织形式的描述,进程是程序的实体。

我们通过快捷键->CTRL + SHIFT + ESC<-可以打开任务管理器,如下图。

在这里,可以看到正在运行的进程,

可以简单的理解为,一个软件(.exe执行程序)运行起来,就是一个进程。


什么是(多)线程?

线程(Thread),是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

我们经常使用微信,微信本质是一个可执行程序,可以视作进程;

在微信中,有“聊天”,“通讯录”,“朋友圈”,“视频号”等等功能,可以视作线程

可以简单的理解为,软件中可以相互独立、同时运行的功能,就是线程。

特别的,如果线程不止一个,我们就称之为多线程(扣题)


多线程有什么用?

我举一个栗子——

阿晴是一个海王(反正不是我),作为一个合格的海王,必须经营好自己的鱼塘,对于每一条鱼都要“照顾周到”,每条鱼找阿晴聊天时,阿晴最多10分钟之内必须要做出回复,不然小鱼鱼就会伤心难过离你而去,从而痛失海王之称。 

在上面这个例子中,海王阿晴其实是cpu的类比,鱼塘是指进程,而小鱼鱼们就是一个个线程

如果阿晴是纯爱战士(这个可以是我) ,只关心一条唯一的心上鱼,每10分钟回复一次消息,那我想应该是随便都能“应对”过来的,可见单线程是很轻松的。

但其实阿晴也可以在这10分钟内依次回复小鱼鱼们,反正回复完一条鱼之后10分钟内不用再管,怎么也来得及,充分把这10分钟给利用起来,经营好一片鱼塘,所以多线程主要看cpu的性能。

在代码中——

System.out.println("第一次回消息");//0.04s

System.out.println("第二次回消息");//0.02s

System.out.println("第三次回消息");//0.02s

System.out.println("第四次回消息");//0.03s

System.out.println("第五次回消息");//0.15s

for(int i = 1; i <= 5; i++){

        System.out.println("第二次回消息");

}

上面我写了两段伪代码, 可以看作两个不同线程。

即便你的cpu很强大可以一次性全部执行,但在单线程程序中,这五行代码一定是一行一行执行的,cpu不会切换到其它代码中执行。

如果是多线程,cpu就可以充分利用某行执行时间较长代码的等待时间,去执行其它线程的代码,从来提高进程的整体运行效率。比如在第一块中花了0.04s去执行第一行,在这个同时就可以去执行第二块中的第一次循环,而不是等到第一块的五行完全执行完毕,才开始进入第二块!


并发和并行

并发:在同一时刻,有多个指令在单个cpu上交替执行。

并行:在同一时刻,有多个指令在多个cpu上同时执行。(通常电脑是只有一颗cpu的,这里所指的“多个cpu”指的是cpu的核心数量,比如2核4线程4核8线程8核16线程16核32线程32核64线程,也就是cpu的性能,决定了同一时间能处理多少线程。)

/*

上面两个概念都是指“海王行为”,同时应付多条小鱼鱼。区别在于,根据cpu的性能(有几核几线程)决定同一时间执行的线程数(可以理解为海王也有高低之分)。

*/


总结 

1.什么是多线程?
有了多线程,我们就可以让程序同时做多件事情
2.多线程的作用?
提高进程的整体运行效率
3.多线程的应用场景?
只要你想让多个事情同时运行就需要用到多线程,比如:软件中的耗时操作、所有的聊天软件、所有的服务器。


下一篇将介绍多进程的实现方式,敬请期待。

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

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

相关文章

求二叉树中指定节点所在的层数(可运行)

运行环境.cpp 我这里设置的是查字符e的层数&#xff0c;大家可以在main函数里改成自己想查的字符。&#xff08;输入的字符一定是自己树里有的&#xff09;。 如果没有输出结果&#xff0c;一定是建树错误&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…

Maven环境配置

Maven环境配置 下载Maven 网址&#xff1a;https://maven.apache.org/download.cgi 如果你的系统是Windows的直接按照箭头指示下载即可 环境变量配置 配置环境变量&#xff1a;将 Maven 的安装目录添加到您的系统环境变量中。 右键点击“我的电脑”&#xff08;或“此电脑…

Startdrive中上传参数设置的具体方法和注意事项

Startdrive中上传参数设置的具体方法和注意事项 适用于配 SINAMICS S120、G130、G150、S150和MV(基于CU3x0-2的驱动器)和所有启动驱动器版本INAMICS G115D/G120/G120D/G120C/G120P/G110M(基于CU2x0-2的驱动器) 根据SINAMICS类型的不同,Startdrive中的Upload参数有所不同。…

leetcode刷题详解——粉刷房子

1. 题目链接&#xff1a;LCR 091. 粉刷房子 2. 题目描述&#xff1a; 假如有一排房子&#xff0c;共 n 个&#xff0c;每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种&#xff0c;你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。 当然&#xff0c;因为…

Ubuntu20上离线安装samba

如果联网&#xff0c;一条 sudo apt-get install samba就可能解决问题&#xff0c;但是没有网&#xff0c;那么只能一个一个的解决问题&#xff1a; 我以为装了samba-common就可以了&#xff0c;发现smbd.serverice not found,于是开始了漫长的下载依赖包&#xff0c;安装&…

Linux中Team链路聚合配置

目录 一、Team介绍 二、网卡的bonding和Teaming技术 三、Teaming常用工作模式 四、实验环境 五、添加物理网卡 1、给虚拟机新增四张物理网卡 2、查看网卡信息 六、Team链路聚合配置 1、创建team0的网络接口 2、为team0设置静态IP,掩码位&#xff0c;网关&#xff0c;dns…

Java并发编程第12讲——cancelAcquire()流程详解及acquire方法总结

上篇文章介绍了AQS的设计思想以及独占式获取和释放同步状态的源码分析&#xff0c;但是还不够&#xff0c;一是感觉有点零零散散&#xff0c;二是里面还有很多细节没介绍到——比如cancelAcquire()方法&#xff08;重点&#xff09;&#xff0c;迫于篇幅原因&#xff0c;今天就…

Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用

专栏集锦&#xff0c;大佬们可以收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https:/…

求二叉树的最大密度(可运行)

最大密度&#xff1a;二叉树节点数值的最大值 如果没有输出结果&#xff0c;一定是建树错误&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 我设置输入的是字符型数据&#xff0c;比较的ASCII值。 输入&#xff1a;FBE###CE### 输…

基于单片机设计的气压与海拔高度检测计(采用MPL3115A2芯片实现)

一、前言 随着科技的不断发展&#xff0c;在许多领域中&#xff0c;对气压与海拔高度的测量变得越来越重要。例如&#xff0c;对于航空和航天工业、气象预报、气候研究等领域&#xff0c;都需要高精度、可靠的气压与海拔高度检测装置。针对这一需求&#xff0c;基于单片机设计…

端到端数据保护浅析

作为最重要的数据保护方式之一&#xff0c;NVMe端到端数据保护被众多企业用户所看重&#xff0c;它可以有效降低静默错误的发生&#xff0c;保护范围涵盖数据自Host端生成直至写入SSD NAND当中&#xff0c;以及从SSD NAND读取直至返回Host的全部流程。它使得数据不论是在SSD内部…

服务器安全怎么保障,主机安全软件提供一站式保护

服务器主机安全是指保护服务器主机免受未经授权的访问、破坏、窃取或滥用。 现在如今大部分公司、单位的相关数据都是存储在云端服务器上&#xff0c;这样即方便查询也方便保存。 可是一旦服务器主机受到威胁&#xff0c;损失将会不可估计。 以下是一些服务器主机安全的建议…

支付宝生僻字选择器

本文的数据来源于支付宝网页版本生僻字选择器。 let rareWords[{spell: "a",words: ["奡", "靉", "叆"]}, {spell: "b",words: ["仌", "昺", "竝", "霦", "犇", "愊…

MySQL数据库——存储过程-条件处理程序(通过SQLSTATE指定具体的状态码,通过SQLSTATE的代码简写方式 NOT FOUND)

目录 介绍 案例 通过SQLSTATE指定具体的状态码 通过SQLSTATE的代码简写方式 NOT FOUND 介绍 条件处理程序&#xff08;Handler&#xff09;可以用来定义在流程控制结构执行过程中遇到问题时相应的处理步骤。具体语法为&#xff1a; DECLARE handler_action HANDLER FOR c…

Linux调度域与调度组

引入调度域的讨论可以参考这篇文章。这篇笔记重点分析了内核调度域相关的数据结构以及内核用于构建调度域的代码实现&#xff0c;以此来加深对调度域的理解。调度域是调度器进行负载均衡的基础。 调度域拓扑层级 整个系统的调度域组成一个层级结构&#xff0c;内核设计了stru…

上海亚商投顾:沪指冲高回落 短剧、地产股集体走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数早盘冲高&#xff0c;创业板指盘初涨超1%&#xff0c;午后则集体下行翻绿&#xff0c;北证50一度大涨…

MyBatis:关联查询

MyBatis 前言关联查询附懒加载对象为集合时的关联查询 前言 在 MyBatis&#xff1a;配置文件 文章中&#xff0c;最后介绍了可以使用 select 标签的 resultMap 属性实现关联查询&#xff0c;下面简单示例 关联查询 首先&#xff0c;先创建 association_role 和 association_…

Postgresql常用命令函数

1、string_agg()函数 1.1用法: string_agg(expression, delimiter)&#xff0c;参数类型(text, text) or (bytea, bytea)&#xff0c;返回类型和参数类型一致,第一个参数是字段名&#xff0c;第二个参数是样式&#xff0c;比如&#xff0c;或者#分隔。 1.2实战: SELECT * FR…

深入解析数据结构与算法之堆

文章目录 &#x1f966;引言&#xff1a;&#x1f966;什么是堆&#x1f966;大顶堆与小顶堆&#x1f9c4;大顶堆&#xff08;Max Heap&#xff09;&#x1f9c4;小顶堆&#xff08;Min Heap&#xff09; &#x1f966;堆的表示&#x1f9c4;数组表示&#xff1a;&#x1f9c4;…

设计模式总结-笔记

一个目标&#xff1a;管理变化&#xff0c;提供复用&#xff01; 两种手段&#xff1a;分解vs.抽象 八大原则&#xff1a; 依赖倒置原则&#xff08;DIP&#xff09; 开放封闭原则&#xff08;OCP&#xff09; 单一职责原则&#xff08;SRP&#xff09; Liskov替换原则&a…