簡體   English   中英

Java:多線程和2D線程

[英]Java: Multi-Threading and 2D threads

我正在制作一個可以工作但沒有照明的光線追蹤器。 對於那些不知道的人,光線追蹤器通過從攝像機(觀察者)發出光線通過屏幕的每個像素來工作,測試3D空間中物體的碰撞,並在光線撞擊物體時着色像素。

您必須為每個像素運行計算,這是很多計算。 所以我為每列像素都有一個線程。 目前,我正在實施Runnable。 這提高了程序的速度,並且對外部過程的整體處理速度沒有明顯的影響(這很好)。

對於照明,我將采用相機光線與物體相交的3D空間中的點,並確保該點應該點亮(考慮所有存在的光源,這可能足以保證多線程) 。

我認為讓線程創建更多線程(2D線程)是不好的做法,但是有一些庫或實現它的方法使其高效嗎? 我知道這不會導致無限遞歸,但我也不想超載我的CPU。 基本上我如何安全地處理需要“2D線程”的過程?

您可以使用ExecutorService來管理線程。 也許嘗試使用Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())

您的Runnable實現可以創建更多Runnable實例並將它們提交給相同的ExecutorService 如果您確定它不會創建無限遞歸,它應該運行完成並且不使用比您的硬件可用的更多的線程。 您唯一需要注意的是,您不會創建那么多內存不足的Runnable實例。 您還需要跟蹤所有Runnable實例何時完成,但該服務提供了執行此操作的機制(請參閱Java API中的Future )。

如果你正在為每個線程做一個列,你將失去平鋪的一個優點 - 射線一致性。 雖然,老實說,我從來沒有發現它特別有利,但是我再也沒有在Arnold或Mental Ray上工作......我會嘗試從單一射線開始並將你的質量和pps提升為盡可能高,然后將你的圖像的方塊磨成不同的線程......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM