Java:多线程和2D线程

时间:2016-04-11 21:26:10

标签: java multithreading 3d thread-safety raytracing

我正在制作一部有效但尚无照明的光线追踪器。对于那些不知道的人,光线追踪器通过从摄像机(观察者)发出光线通过屏幕的每个像素来工作,测试3D空间中物体的碰撞,并在光线撞击物体时着色像素。

你必须为每个像素运行计算,这是很多计算。所以我为每列像素都有一个线程。目前,我正在实施Runnable。这提高了程序的速度,对外部过程的整体处理速度没有明显影响(这很好)。

对于照明,我将采用相机光线与物体相交的3D空间中的点,并确保点亮该点(考虑所有存在的光源,这可能足以保证多个光源) -threading)。

我认为让线程创建更多线程(2D线程)是不好的做法,但是有一些库或实现它的方法使其高效吗?我知道这不会导致无限递归,但我也不想超载我的CPU。基本上我如何安全地处理需要“2D线程”的过程?

2 个答案:

答案 0 :(得分:2)

您可以使用ExecutorService来管理您的主题。也许尝试使用Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())

您的Runnable实施可以创建更多Runnable个实例并将其提交给同一个ExecutorService。如果您确定它不会创建无限递归,它应该运行完成并且不再使用比您的硬件可用的线程更多的线程。您唯一需要注意的是,您不会创建那么多内存耗尽的Runnable个实例。您还需要跟踪所有Runnable实例何时完成,但该服务提供了执行此操作的机制(请参阅Java API中的Future)。

答案 1 :(得分:1)

如果您为每个帖子做一个专栏,那么您将失去平铺的一个优势 - 光线连贯性。虽然,老实说,我从来没有发现它特别有利但是我再也没有在Arnold或Mental Ray上工作......我试着用一缕射线开始你的质量和pps尽可能高,然后将你的形象的方块磨成不同的线程......