线程(一)伤害不大,侮辱性极强——idm与多人运动

多线程技术概述(就是多个线程)

相信很多小伙伴都玩过王者荣耀,手游中的王者,曾经的我也曾沉迷其中,但他的匹配机制及团战延迟让人诟病,气得让人退游(退游原因,不想让他腐蚀我的灵魂,好吧,我承认现实压力大😭,想要有所改变,所以退游,因为我始终觉得人要想得到一些东西必然要放弃一些东西作为交换,所以小伙伴们加油!卷起来。。。)。后来官方版本更新加入了多线程模式,一起来了解下吧。(以下来自百度两位网友)

:王者荣耀中我们开启多线程模式之后,可以让我们在进行团战的时候提升帧率,为玩家带来更流畅的团战游戏体验和更平滑的游戏体验。主要是因为有的智能手机性能太低,一旦团战就会掉帧严重,给玩家带来非常不好的体验。所以多线程模式可以解决这个问题。

:同时用几个线程运行王者吧,会比较流畅,当然耗电和发热会比较大,具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理(Chip-level multithreading)或同时多线程(Simultaneous multithreading)处理器。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理(Multithreading)”。

小提示帧数(Frames) : 为帧生成数量的简称(可以理解为多少张图片,感兴趣的可以点击这两个名词跳转进百度)。帧率(Frame rate):每秒显示帧数

既然和线程有关那让我们来学习学习什么是线程吧
在这里插入图片描述
不知道大家用没用过idm(网上有资源的,懂得都懂,自行下载,我多人运动速度为6mb/s,哦不对,是多线程下载速度6mb/s是因为我带宽小,不代表idm的速度只有这么点),这里有两个绿色的进度条,第一个绿色的进度条是总的进度条,第二个是实际下载进度条,那个数字1-32是线程编号,这是因为我设置的最大线程为32个(自行设置,看自身需求),也就是说我的idm最多能用32个线程下载同一文件,一个线程下载就是像第一个进度条(记住这是全部线程加起来的总下载量)一样从头到尾一个人干活(能干,就是速度能让猛男落泪),而多线程就是多个人干活,好兄弟一起干(就是多人运动,多快乐呀,哦不对,是多快呀!)下图可以看到各个线程(绿色的片断就是各个线程的下载量)的下载速度,再看看总进度(总进度),知道该怎么选了吗?(当然多线程不一定总是比单线程快)
在这里插入图片描述

在这里插入图片描述

线程与进程

进程(可以理解为idm软件或者王者荣耀)

  • 是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间(一个进程可以理解为一个软件,虽然现在电脑端的软件会有多进程,打开任务管理器的详细信息就能看到,一个软件可能有多个进程,当然这不重要),一般不相互占用,但是,不同进程可以共享操作系统的资源,比如剪贴板。
  • 一个CPU在任何时刻都只能执行一个进程,但因为CPU具备分时机制,使得进程可以轮流在不同时间片使用CPU资源,而且轮流切换非常快,使得进程看起来好像是“同时”运行。

线程(就是idm下载文件的各个小弟(下载绿色小片断的))不懂往上再理解理解

  • 线程(英语:thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。(百度

  • 是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行,一个进程最少有一个线程

  • 线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分成若干个线程

多进程与多线程

计算机中可以同时运行多个程序(多核系统的计算机有多个CPU,所以可以并行运行多个进程),例如刷着b站,听着歌,聊着天,这是多进程,这是对计算机而言。

多线程则是一个程序可以同时执行两个或多个任务,比如,浏览器下载文件的同时刷刷B站,而这样一个程序可以包含两个或两个以上**并发(往下翻)**运行的部分叫做线程。每个线程有独立的执行路径,但是同一进程的包含的所有线程共享该进程的的内存空间和系统资源(包括代码和数据)。优点:线程间的通信比进程简单,线程间的切换负荷也比进程小得多。

线程调度

分时调度

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

抢占式调度

  • 优先让优先级高的线程使用 CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性,可以理解为谁抢到时间片就执行谁),Java使用的为抢占式调度。

  • CPU使用抢占式调度模式在多个线程间进行着高速的切换。对于CPU的一个核新而言,某个时刻,只能执行一个线程,而 CPU的在多个线程间切换速度相对我们的感觉要快,看上去就是在同一时刻运行。 其实,多线程程序并不能提高程序的运行速度,但能够提高程序运行效率,让CPU的使用率更高。

同步与异步

同步:排队执行 , 效率低但是安全。举个不太恰当的例子:多人排队打饭,前面的人打了饭,你是知道的,饭少了,每个人打一次饭,饭会越来越少,直到没饭了。

异步:同时执行 , 效率高但是数据不安全。也举个不太恰当的例子:多个人抢着打饭,后面的人并不知道还有没有饭,等到你打饭时一打,没饭了(没有负数的饭),现实生活中只是饿肚子
,在程序里会出大问题,再来个例子:甲乙两人去银行取钱,假设银行只有100元,甲取60块,乙取80块,他们互不知道对方,甲取钱时发现还有一百块够了,乙也是这样想的,一取钱出问题了,银行的钱是-40元了,造成了数据不安全。

并发与并行

并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间(在同一个时间段内,两个或多个程序执行),且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。(宏观上是同时发生,微观上仍是顺序执行),即人眼看上去是一起运行的,其实不是)
可以理解为两个或多个事件在同一个时间段内发生。

并行:并行是指“并排行走”或“同时实行或实施”。
在操作系统中是指,一组程序按独立异步的速度执行,无论从微观还是宏观,程序都是一起执行的。
理解为两个或多个事件在同一时刻发生(真正意义上的同时发生)。(多个核可以在同一时刻做多件事)

如果我没记错的话,以前物理书上对时间的描述是这样的11.16到11.17分一分钟内,是时间段,而时刻是11.16分是指的是那刚到16分钟的那一刻,所以理解这里面的“时间”概念就可以理解并行和并发

线程的挂起

线程的挂起是指线程进入阻塞状态。在这个状态中的线程不会被分配CPU时片。因此,将线程挂起通常用来暂停某个线程的运行。在线程被挂起后,可以通过唤醒操作使线程进入可运行状态,等待CPU的使用权。
线程阻塞,也称耗时操作,可以理解为所有消耗时间的操作,文件读取等,接收用户输入,用户不输入线程一直等待。
线程进入阻塞状态可能的原因:

  1. 调用了该线程对象的sleep()方法。
  2. 该线程对象正在等待I/O操作完成。
  3. 调用了该线程对象的wait()方法。
  4. 调用了其他线程对象的join()方法(底层就是封装了一个wait()方法)。(在一个线程的run()方法中,让其他线程调用join()方法,可以让本线程在占有CPU时挂起,即暂停当前执行,等待调用该方法的线程结束后再进入可运行状态,等待CPU的使用权。因此join()方法被用于实现线程联合,或者叫做用于加入线程)

线程的中断

当线程在调用了如 sleep(),wait()之类的方法处于阻塞状态时,可以调用interrupt()方法中断阻塞,并抛出InterruptException类异常。通常可以捕获该异常以处理超时。另外Thread类还提供了一个方法isInterrupted()用于判断线程是否已经中断,已被中断返回True不由返回False。一个线程是一个独立的执行路径,他是否需要结束,应该由其自身决定。

线程死锁

甲乙两吃饭,甲有筷子,乙有碗,甲想等乙吃完得到乙的碗(等待乙释放资源),乙想等甲吃完得到甲的筷子(等待甲释放资源),甲等乙,乙等甲,无限互等,都无法吃饭。这就是死锁
解决方法:在任何一个有可能导致锁产生的方法里,不要调用另一个有可能导致锁产生的方法

如果到这已经不再想着王者荣耀了,那就开启下一篇的学习吧
请添加图片描述

图片来自网络。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值