Java挖礦解決方案
我是探勘算法的初學者,我有一個關於使用 Java 語言進行探勘的一般性問題。
使用 Java 開發例如 ETHASH 算法(或任何其他算法)是否有意義,它會像 C 一樣有效嗎?
我已經發現可以使用 Java 和 OpenCL 進行探勘,例如這裡:是否有用於探勘比特幣的 Java 或 C# 庫?
但是,我仍然很困惑,它會變慢嗎?還是 Java 只需將數據/程式碼傳輸到 GPU,然後它就可以像原生 C 程式碼一樣工作?還是我錯過了什麼?它是如何運作的?
提前感謝您的任何回复或參考。
Java(Oracle 而不是 JavaScript)通常是企業伺服器的兩種競爭範式之一。另一個是 windows,假設 Java 總是與某些企業版本的 Linux 配對。因此,儘管您可以在 Windows 伺服器上完全使用 Java,而不會損失任何實用程序或性能,但在您使用 Java 的設置中,您很可能會使用 Linux,因為 Windows 具有稱為 c# 的競爭程式範式。此外,這裡的比較是粗略的,並不意味著 c# 到 Java 的 1 對 1 映射。
也就是說,Java 的主要原因是完整的硬體抽象和程序的可移植性。這樣做的副作用是更容易擴展。新的伺服器硬體可以上線並完全自動加入現有的伺服器硬體執行 Java。
Java 可能是最高級的軟體語言之一。在這種情況下,您可以處理主要抽象的計算概念,而無需處理目前格式的日常電腦中經常重複且坦率獨立的方面。此外,這可能是 Java 在學術界有一些追隨者的原因。您可以研究抽象的計算問題,而不是一些可能過時的標准出版物。理論上,如果正確編寫,一些 Java 軟體永遠不會過時或過時。
Java 作為權衡確實有很大的成本。當您說 c 或 c++ 時,這並不一定描述它的性能,因為在某種程度上這只是描述語言語法的標準。你可能真正想到的是它編譯成什麼。例如,它可以是可移植的執行檔或 .exe,也可以是微控制器臂機器二進製文件或可供處理器讀取的操作碼列表。
Java 確實指定了性能,因為它只編譯為一件事。那是 Java 虛擬機執行的一組程式碼(反過來由 c 產生的東西執行)。這就是 Java 獲得可移植性的方式。JVM 充當從一個介面到另一個介面的套接字或適配器。因此,一個人需要為特定機器開發 JVM,僅此而已。您可以看到 Java 的高優先級是提高其 JVM 的性能。但是即使仍然例如在 c 和低到硬體中,您也可以通過乘以一個常數將昂貴的三角函式轉換為粗略的近似值。在 for 循環等呼叫 trig 函式中,這在 c 中可能是允許的,而呈現 Java 應用程序完全不可能。
最後,對於探勘,Java 的關鍵方面是可擴展性。Java 軟體可以輕鬆且非常簡潔地編寫,以檢測新的網路添加並開始為它們安排工作。因此,您可以使用任何電腦,只要它有一個 JVM,它現在就是池的一部分,只需啟動其他人正在執行的同一個 Java 應用程序。我不確定您是否可以使用 c 輕鬆獲得此方面。這部分是因為 Windows 對硬體 OEM 有不同的理念,部分原因是利潤和商業環境,但是你可以看到 Windows PC 硬體的出色多樣性,同時仍然通常保持替代品的最佳性能.
再次。儘管 Java 使企業能夠輕鬆獲得所需的伺服器功能並最大程度地減少麻煩。有時頭痛是學習所必需的,但有時這不是我們想要的。
在任何情況下,如果您對由於 JVM 成本導致的性能下降進行建模,則必須將其與更長的停機時間或啟動新硬體的時間進行比較。如果你花了一周的時間在 c 中的 windows 上獲得一個新的未成年人,並且你可以在 5 分鐘內完成它在帶有 Java JVM 的 Linux 發行版上,你可能會在短期內虧錢。如果採礦硬體的壽命很短,那也可以改善 Java 的原因。這是一些物聯網和使用作業系統的東西。使用自定義伺服控制器可能會獲得更好的性能,但如果 raspberry pi 能夠在 1% 的時間內啟動並在 Linux 上執行,實際上,在測試原型的幾個項目之後,你就會開始貶低基本解決方案。