你真的知道什么是多线程吗?为什么要学习多线程?

文章目录

    • 1、多线程的含义
    • 2、原理
    • 3、优势
    • 4、线程与进程的区别
    • 5、线程与多线程的区别
    • 6、线程调度的分类
    • 7、同步与异步
    • 8、并发与并行
    • 9、为什么要使用线程池
    • 10、线程池的好处
    • 11、线程池的分类
    • 12、意义


1、多线程的含义

多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包阔对称处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。

2、原理

多线程就是把操作系统中的这种并发执行机制原理运用在一个程序中,把一个程序划分为若干个子任务,多个子任务并发执行,每一个任务就是一个线程。

实现多线程是采用一种并发执行机制。

3、优势

1、方便的通信和数据交换

2、更高效地利用CPU

4、线程与进程的区别

线程 是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行. 一个进程最少 有一个线程,线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分成若干个线程。

进程 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间

5、线程与多线程的区别

线程是系统对代码的执行进程,如果将系统当做一个员工,被安排执行某个任务的时候,他不会对任何其他的任务作出响应。只有当这个任务执行完毕,才可以重新给他分配任务。一个程序都有一个主线程,负责执行程序必要的任务 。

img

当我们处理一个消耗大的任务(如上传或下载图片),如果让主线程执行这个任务,它会等到动作完成,才继续后面的代码。在这段时间之内,主线程处于“忙碌”状态,也就是无法执行任何其他功能。体现在界面上就是,用户的界面完全“卡死” 。

多线程是指,将原本线性执行的任务分开成若干个子任务同步执行,这样做的优点是防止线程“堵塞”,增强用户体验和程序的效率。缺点是代码的复杂程度会大大提高,而且对于硬件的要求也相应地提高。

6、线程调度的分类

(1)分时调度

所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时间。

(2)抢占式调度 (常用)

优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性), Java使用的为CPU使用抢占式调度模式在多个线程间进行着高速的切换。对于CPU的一个核新而言,某个时刻, 只能执行一个线程,而 CPU的在多个线程间切换速度相对我们的感觉要快,看上去就是 在同一时 刻运行。 其实,多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的 使用率更高。

7、同步与异步

img

同步:排队执行 , 效率低但是安全.

异步:同时执行 , 效率高但是数据不安全

8、并发与并行

并发:指两个或多个事件在同一个时间段内发生。

并行:指两个或多个事件在同一时刻发生(同时发生)。

img

9、为什么要使用线程池

​ 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低 系统的效率,因为频繁创建线程和销毁线程需要时间. 线程池就是一个容纳多个线程的容 器,池中的线程可以反复使用,省去了频繁创建线程对象的操作,节省了大量的时间和资源。

10、线程池的好处

  • 降低资源消耗。
  • 提高响应速度。
  • 提高线程的可管理性。

11、线程池的分类

img

(1)缓存线程池:长度无限制

执行流程 :

  • 判断线程池是否存在空闲线程
  • 存在则使用
  • 不存在,则创建线程 并放入线程池, 然后使用

2. 定长线程池 : 长度是指定的数值

执行流程 :

  • 判断线程池是否存在空闲线程
  • 存在则使用
  • 不存在空闲线程,且线程池未满的情况下,则创建线程 并放入线程池, 然后使用
  • 不存在空闲线程,且线程池已满的情况下,则等待线程池存在空闲线程

12、意义

无论是过去还是现在,世界上大多数计算机仍然采用的是冯·诺依曼结构,这种结构的特点就是顺序处理,一个处理器在同个时刻只能处理一件事情。 Windows 95/NT采用一种全新的任务调度策略,它把一个进程划分为多个线程,每个线程轮流占用CPU的运算时间,操作系统不断地把线程挂起、唤醒、再挂起、再唤程,如此反复,由于现在CPU的速度比较快,给人的感觉是多个线程在同时执行,就好像有多个CPU存在于计算机中一样。

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

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

相关文章

oracle 表关联索引优化,Oracle执行计划调优-超级大表关联超级小表的性能调优

今日客户现场出现一个查询SQL异常慢的情况。用时分钟级别。SELECT *FROM (SELECT a1.*, rownum rnFROM (SELECT openOrder2017.exchId,............openOrder2017.internalbizmark,customer.typeIdListFROM openOrder2017, customerWHERE openOrder2017.custId customer.custI…

Common Sort - 排序 - Java

文章目录排序概念稳定性(重要)应用 - 举例1.、各大商城的价格从低到高等2、中国大学排名常见的排序算法(8 种)- 总览直接插入排序模拟实现 - 插入排序稳定性分析结论希尔排序思考原理科学家的分组思维模拟实现 - 希尔排序总结选择…

linux的运行级别如何更改成6,把Linux运行级别设置为6后如何解决的经验分享

我们知道,Linux有7个运行级别,而运行级别设置为6后,会导致Linux系统刚启动完成就立刻重启,重启后又会立刻重启,如此反复,导致系统不能正常运行。本文笔者和大家分享一下误把Linux运行级别设置为6后如何解决…

flume linux 命令,Linux环境Flume安装配置及使用

# Flume监听本地Linux-hive日志文件采集到HDFS——配置文件# Name the components on this agent agent别名设置a1.sources r1a1.sinks k1a1.channels c1# Describe/configure the source 设置数据源监听本地文件配置# exec 执行一个命令的方式去查看文件 tail -F 实时查看a…

Redis五种数据结构应用场景

文章目录前言二、字符串String2.1、常用操作2.2、应用场景2.2.1、单值缓存(最常用)2.2.2、对象缓存2.2.3、分布式锁2.2.4、计数器三、哈希hash3.1、常用操作3.2、应用场景3.2.1、对象缓存3.2.2、 电商购物车四、列表list4.1、常用操作4.2、应用场景4.2.1…

linux能记录日志的终端,Linux上的日志系统

Linux上的日志系统1、syslog2、syslog-ng 下一代升级版日志系统红帽5使用syslog 6使用syslog-ngsyslog 服务syslogd : 系统,非内核产生的信息klogd : 内核,专门负责记录内核的日志信息系统启动时所输出的信息【到init启动之前的所有信息】:…

IntelliJ IDEA中的神仙插件

文章目录1. Alibaba Java Coding Guidelines2.GsonFormat3.A8Translation4.Maven Helper5.Free Mybatis plugin6.Grep Console7.Lombok8.Nyan progress bar9.FindBugs-IDEA10.Key Promoter X11.JavaDoc12.ignore13.RainbowBrackets14.Activate-power-mode15.CodeGlance16.Gener…

linux 远程拒绝服务,Linux Kernel SCTP远程拒绝服务漏洞

发布日期:2011-08-30更新日期:2011-08-30受影响系统:Linux kernel 2.6.x描述:--------------------------------------------------------------------------------BUGTRAQ ID: 49373CVE ID: CVE-2011-2482Linux Kernel是Linux操…

linux 常用命令行 大全

Linux常用命令大全(非常全!!!) 最近都在和Linux打交道,感觉还不错。我觉得Linux相比windows比较麻烦的就是很多东西都要用命令来控制,当然,这也是很多人喜欢linux的原因&#xff0c…

linux运行程序+后注销,linux – 如果我启动后台进程然后注销,它会继续运行吗?...

在与同事长时间讨论之后问这个问题,我真的想在这里澄清一下.我通过添加“&”来启动后台进程到命令行或用CTRL-Z停止它并在后台用“bg”恢复它.然后我退出了.怎么了?我们很确定它应该被一个SIGHUP杀死,但这并没有发生;再次登录时,进程很愉快,并且pstree显示它被i…

SpringBoot使用Websocket

webSocket是HTML5的一种新协议,它实现了服务端与客户端的全双工通信,建立在传输层,tcp协议之上,即浏览器与服务端需要先建立tcp协议,再发送webSocket连接建立请求。webSocket的连接:客户端发送请求信息&…

linux误删文件咋恢复,恢复Linux误删文件

恢复Linux误删文件目录方法一方法二不小心执行了rm删除了某些文件,是有点倒霉。不过我一般都会设置alias rmrm -i在删除的时候需要输入Y才能真正删除,当然此时用rm -f那也会直接删除了。因此找了两种方案恢复误删的文件。方法一适用系统内置debugfs&…

Springboot整合Websocket遇到的坑_websocket session不支持序列化,无法存储至redis_Websocket相关问题总结(Session共享,用户多端登录等)

Springboot整合Websocket遇到的坑 一、使用Springboot内嵌的tomcat启动websocket 1.添加ServerEndpointExporter配置bean Configuration public class WebSocketConfig {/*** 服务器节点** 如果使用独立的servlet容器,而不是直接使用springboot的内置容器&#x…

linux 中文意思,linux 中 ~/. 是什么意思

~代表你的/home/用户明目录假设你的用户名是x,那么~/就是/home/x/.是代表此目录本身,但是一般可以不写所以cd ~/. 和cd ~ 和cd ~/效果是一样的但是.后面有东西又是另外一个问题,点在文件名头部,代表一个隐藏文件~/.local是你的主目…

图文详解mina框架

Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高…

linux my.cnf基本参数,Linux中MySQL配置文件my.cnf参数说明

MySQL参数优化这东西不好好研究还是比较难懂的,其实不光是MySQL,大部分程序的参数优化,是很复杂的。MySQL的参数优化也不例外,对于不同的需求,还有硬件的配置,优化不可能又最优选择,只能慢慢的进…

gpt efi win7 linux,科学网—UEFI+GPTSSD+HDD 成功安装win10+Centos linux7 过程 - 陈长云的博文...

主机为:Dell Precision T7910台式工作站 SSD HDD 双硬盘1、必备工具① Disk Genious② Win10系统(光盘和U盘,我用的是U盘),网上可以下载cn_windows_10_business_edition_version_1809_updated_sept_2018_x64_dvd_fc5542c0③ Centos7系统(我…

MINA核心结构和处理消息的逻辑流程

1.MINA 核心结构 IoService 最底层的是IOService,负责具体的IO相关工作。这一层的典型代表有IOSocketAcceptor和IOSocketChannel,分别对应TCP协议下的服务端和客户端的IOService。IOService的意义在于隐藏底层IO的细节,对上提供统一的基于事…

linux shell文件锁,shell脚本实现文件锁功能

1.背景当多个进程可能会对同样的数据执行操作时,这些进程需要保证其它进程没有在操作,以免损坏数据。通常,这样的进程会使用一个“锁文件”,也就是建立一个文件来告诉别的进程自己在运行,如果检测到那个文件存在则认为…

java 图片操作技术之RGB的获取

/*** 名词解释:* 饱和度是指色彩的鲜艳程度,也称色彩的纯度。* 灰度:使用黑色调表示物体,即用黑色为基准色,不同的饱和度的黑色来显示图像。* 像素:如同摄影的相片一样,数码影像也具有连续性的浓淡阶调&…