Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对于Java游戏来说,线程实体或线程扇区哪个内存效率更高?_Java_Multithreading_Memory Management - Fatal编程技术网

对于Java游戏来说,线程实体或线程扇区哪个内存效率更高?

对于Java游戏来说,线程实体或线程扇区哪个内存效率更高?,java,multithreading,memory-management,Java,Multithreading,Memory Management,我正在制作射击游戏,我计划在屏幕上充斥实体(子弹、暴徒等等)。我尝试了一个全局计时器来更新屏幕上的所有内容,但是当我像我想要的那样满屏时,我的fps严重下降 因此,我认为自己有两个选择。我可以给每个单独的实体一个计时器线程,或者我可以将级别划分为块,并给每个块自己的计时器 在第一个场景中,实体有自己的计时器线程,我将得到数百个实体,每个实体都有自己的线程运行计时器 在section选项中,我将使用一个计时器同时更新多个实体,并检测实体何时从一个部分离开到另一个部分 我不熟悉考虑内存效率的编程,所

我正在制作射击游戏,我计划在屏幕上充斥实体(子弹、暴徒等等)。我尝试了一个全局计时器来更新屏幕上的所有内容,但是当我像我想要的那样满屏时,我的fps严重下降

因此,我认为自己有两个选择。我可以给每个单独的实体一个计时器线程,或者我可以将级别划分为块,并给每个块自己的计时器

在第一个场景中,实体有自己的计时器线程,我将得到数百个实体,每个实体都有自己的线程运行计时器

在section选项中,我将使用一个计时器同时更新多个实体,并检测实体何时从一个部分离开到另一个部分

我不熟悉考虑内存效率的编程,所以哪种方法更适合我使用?

你可以试试

这是我们的一部分。您可以决定应该存在多少线程(它将线程重新用于不同的任务,以避免每次创建新线程的开销,因此比始终创建新线程要高效得多),或者使用缓存线程池(这将创建所需的尽可能多的线程,但一旦某个线程死亡,它将重新使用它来运行新任务)


此API的另一个优点是,不仅可以运行可运行程序,还可以使用可调用程序,这可能会返回一个值供将来使用(因此可以在不同线程中执行计算,然后使用每个线程的结果获得最终结果).

我在尝试类似的东西,但没有明确的答案。但也许我从Java-Gaming.org获得的一些反馈会有帮助或有兴趣

我尝试的是:每个实体都有自己的线程,冲突是通过一个非常详细的屏幕地图(基本上是屏幕的第二个版本)来处理的。然后,我有另一个线程来处理屏幕的显示

在线上有一个“早期”版本,其中有500多个实体正在制作动画:

后来的版本使用了更复杂的形状和边界(而不是让实体在边缘死亡和冻结)以及碰撞逻辑,如相互反弹和重力。我还玩了精灵方面的游戏,如“萤火虫”闪烁。我在网页上提到了“演员”,但代码并不是严格意义上的那样

java-gaming.org上的一些人强烈认为拥有这么多线程是没有效率的。他们有很多有趣的反馈,你可能有兴趣去探索。我还没有时间。


他们在讨论超线程和演员acca框架等问题。

我不知道游戏,但我见过一个粒子交互模拟器,它将一个区域分割成一个网格,让每个CPU处理自己的部分。当粒子穿过边界时,前所有者会向新所有者线程/进程/CPU发送一条消息。1 t每个实体的线程数听起来是个坏主意。太多的调度、内存消耗等。每个CPU核心一次只能运行一个线程。如果它们不一直处于睡眠状态,则使用的线程数不能超过您拥有的核心数(或者线程执行单元-1个i7核心可以通过超线程执行两个线程-因此“核心”有点不正确)每个实体1个线程是CUDA/OpenCL.ArjunShanker,你有你提到的模拟器的链接吗?它是开源的吗?我很想看看他们是如何设置的。