问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

游戏多线程优化是什么意思?求科普

发布网友 发布时间:2022-04-21 06:58

我来回答

2个回答

热心网友 时间:2022-06-18 14:16

多线程的概念?
说起多线程,那么就不得不说什么是线程,而说起线程,又不得不说什么是进程。
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。
进程可以简单的理解为一个可以独立运行的程序单位。它是线程的集合,进程就是有一个或多个线程构成的,每一个线程都是进程中的一条执行路径。
那么多线程就很容易理解:多线程就是指一个进程中同时有多个执行路径(线程)正在执行。
为什么要使用多线程?
1.在一个程序中,有很多的操作是非常耗时的,如数据库读写操作,IO操作等,如果使用单线程,那么程序就必须等待这些操作执行完成之后才能执行其他操作。使用多线程,可以在将耗时任务放在后台继续执行的同时,同时执行其他操作。
2.可以提高程序的效率。
3.在一些等待的任务上,如用户输入,文件读取等,多线程就非常有用了。
缺点:
1.使用太多线程,是很耗系统资源,因为线程需要开辟内存。更多线程需要更多内存。
2.影响系统性能,因为操作系统需要在线程之间来回切换。
3.需要考虑线程操作对程序的影响,如线程挂起,中止等操作对程序的影响。
4.线程使用不当会发生很多问题。
总结:多线程是异步的,但这不代表多线*的是几个线程是在同时进行,实际上是系统不断地在各个线程之间来回的切换(因为系统切换的速度非常的快,所以给我们在同时运行的错觉)。
2.多线程与高并发的联系。
高并发:高并发指的是一种系统运行过程中遇到的一种“短时间内遇到大量操作请求”的情况,主要发生在web系统集中大量访问或者socket端口集中性收到大量请求(例如:12306的抢票情况;天猫双十一活动)。该情况的发生会导致系统在这段时间内执行大量操作,例如对资源的请求,数据库的操作等。如果高并发处理不好,不仅仅降低了用户的体验度(请求响应时间过长),同时可能导致系统宕机,严重的甚至导致OOM异常,系统停止工作等。如果要想系统能够适应高并发状态,则需要从各个方面进行系统优化,包括,硬件、网络、系统架构、开发语言的选取、数据结构的运用、算法优化、数据库优化……。
而多线程只是在同/异步角度上解决高并发问题的其中的一个方法手段,是在同一时刻利用计算机闲置资源的一种方式。
多线程在高并发问题中的作用就是充分利用计算机资源,使计算机的资源在每一时刻都能达到最大的利用率,不至于浪费计算机资源使其闲置。
3.线程的创建,停止,常用方法介绍。
1.线程的创建:
线程创建主要有2种方式,一种是继承Thread类,重写run方法即可;(Thread类实现了Runable接口)
另一种则是实现Runable接口,也需要重写run方法。
线程的启动,调用start()方法即可。 我们也可以直接使用线程对象的run方法,不过直接使用,run方法就只是一个普通的方法了。

其他的还有: 通过匿名内部类的方法创建;实现Callable接口。。。。。

2.线程常用方法:
currentThread()方法:该方法返回当前线程的信息 .getName()可以返回线程名称。

isAlive()方法:该方法判断当前线程是否处于活动状态。
sleep()方法:该方法是让“当前正在执行的线程“休眠指定的时间,正在执行的线程是指this.currentThread()返回的线程。
getId()方法:该方法是获取线程的唯一标识。
3.线程的停止:
在java中,停止线程并不简单,不想for。。break那样说停就停,需要一定的技巧。

线程的停止有3种方法:
1.线程正常终止,即run()方法运行结束正常停止。
2.使用interrupt方法中断线程。
3.使用stop方法暴力停止线程。
interrupt方法中断线程介绍:
interrupt方法其实并不是直接中断线程,只是给线程添加一个中断标志。
判断线程是否是停止状态:
this.interrupted(); 判断当前线程是否已经中断。(判断的是这个方法所在的代码对应的线程,而不是调用对象对应的线程)

this.isInterrupted(); 判断线程是否已经中断。(谁调用,判断谁)

注:.interrupted()与isInterrupted()的区别:
interrupted()方法判断的是所在代码对应的线程是否中断,而后者判断的是调用对象对应的线程是否停止
前者执行后有清除状态的功能(如连续调用两次时,第一次返回true,则第二次会返回false)
后者没有清除状态的功能(两次返回都为true)
真正停止线程的方法:
异常法:
在run方法中 使用 this.interrupted();判断线程终止状态,如果为true则 throw new interruptedException()然后捕获该异常即可停止线程。

return停止线程:
在run方法中 使用 this.interrupted();判断线程终止状态,如果为true则return停止线程。 (建议使用异常法停止线程,因为还可以在catch中使线程向上抛,让线程停止的事件得以传播)。

暴力法:
使用stop()方法强行停止线程(强烈不建议使用,会造成很多不可预估的后果,已经被标记为过时)
(使用stop方法会抛出 java.lang.ThreadDeath 异常,并且stop方法会释放锁,很容易造成数据不一致)
注:在休眠中停止线程:
在sleep状态下停止线程 会报异常,并且会清除线程状态值为false;
先停止后sleep,同样会报异常 sleep interrupted;

4.守护线程。
希望对您有所帮助!~

热心网友 时间:2022-06-18 14:17

在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。多线程处理一个常见的例子就是用户界面。利用线程,用户可按下一个按钮,然后程序会立即作出响应,而不是让用户等待程序完成了当前任务以后才开始响应。

简单的说 多线程就是让CPU在同一时间可以执行多个指令
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
红薯干空气炸锅多长时间 用空气炸锅做红薯干好吃么 51. com个人空间登录? 女主人公叫眉姐,烦问一下这电视局的名字是什么 小男人和大女人,电视剧,挺不错的 浙江理工大学收美术生吗?分数线多少? 我是浙江美术生,请问杭州理工服装设计与东华大学哪个好考? 浙江2024美术生能上的大学有哪些 浙江理工大学什么艺术 ...每次到了晚上或者某种特定时间就会想起他,还会哭,该怎样排解。删除他... 和“我们之间记忆的点点滴滴我永远也忘不了,你给我的快乐谁也不能够代替... 婚前购买的房子离婚后怎么分配 婚前房子离婚了怎么分配 结婚前买的房子离婚后怎么分配 婚前买的房子离婚后怎么分配 房子婚前买的离婚后怎么分配 婚前买房子离婚如何分配 梦见浜蹭汉鎴愭潃浜虹姱 结婚前买的房子离婚后怎么分配? 为什么别人能看到我手机的聊天记录 婚前买的房子离婚时要怎么分配 在别人手机上登录自己微信,能看到聊天记录吗 婚前房子离婚怎么分配 我的如果在别人的手机上登录会看到我的聊天记录吗? 怎么样在自己的手机上查看微信的聊天记录 用我手机能看她手机微信聊天记录吗? 怎样可以用自己的手机间看到另一部手机的所有内容? 无锡市惠东物业清洁服务有限公司怎么样? 无锡北塘区交警大队怎么走? 二泉花园到惠东里小区多少公里 惠东那里拆迁的人怎么和拆迁办在打官司 婚前房产离婚时怎么分割 婚前买的房产离婚后如何分割? 婚前购买的房子离婚时房子如何分配 婚前买的房子离婚后要怎样分配 离婚婚前房子怎么分配 婚前房产离婚怎么分 cpu多线程的优势 婚前买的房子,离婚如何分配? 多线程程序有什么优点? 什么时候处理多线程,几种方式,优缺点 多线程和多进程架构分别有哪些优劣势 如何发挥cpu多核多线程的优势 JAVA多线程优先级如何运行。 JAVA多线程优先级运行顺序的问题 【八喜小子】java中多线程的优先级?为什么要分优先级? 苹果12使用8个月,电池健康92%,这样正常吗? 苹果11电池健康用了近6个月电池健康80正常吗 求一张手里是一把药的照片,要真实!急 求一张手里一大把药的图片