簡體   English   中英

Node.js 與 C++ 的數學

[英]Node.js vs C++ for mathematic

我必須編寫一個實現一些模糊邏輯的服務器程序,我選擇在 Node.js 中編寫它以利用其面向事件的優勢。 我必須處理困難的數學計算問題,我不知道獲得性能的最佳方法是什么:

  1. 全部用 Node.js 編寫,並使用 V8 引擎的強大功能來完成數學任務。
  2. 用 C++ 編寫一個實現所有數學函數的模塊,並從 Node.js 調用它。

任何在這兩個平台上都具有此類計算經驗的人?

由於無論如何您都需要 Node.js 部分,請繼續,在 Node.js 中實現所有內容。 如果它足夠快,這很容易維護。 很難預測虛擬機/JIT 編譯器的能力。

如果還不夠快,首先考慮算法改進。 如果這沒有幫助,並且如果分析表明計算是問題,請繼續,用 C++ 重新實現它。 但請注意,編寫高性能 C++ 代碼並非易事。 確保您手頭有一個好的分析器並經常測量。

一般來說,如果編寫正確,我會說 C++ 代碼會更快。 棘手的部分是正確編寫它。 請查看這篇關於 C++、Java、Scala、Go 的 Google 論文以獲取更多信息。 要點是 - 托管語言使編寫和維護代碼變得更加容易,但是如果您需要原始性能,C++ 是最好的。 但它的代價是需要大量的專業知識,而且代碼更難維護。

denshade,您的 C 實現僅適用於 2e5 而不是 2e6,就像您為 js 所做的那樣(鏈接到今天在 Github 上的 revs):

管道到 /dev/null,並將 js 也更改為 2e5,我在我當前的計算機上得到大約 6.5 秒的 C 和大約 8.5 秒的 js(使用某些版本的節點)。

由於您的算法是 O(n^2),我預計 2e6 需要大約 15 分鍾,而不是 15 小時,但我還沒有嘗試過。 也許出於某種原因,它確實崩潰了。

(請注意,我無法直接發表評論,因為我是全新的 SO 並且沒有代表。)

回答這種問題幾乎是不可能的。 這些事情的答案一如既往地取決於您的技能以及您願意投入多少時間和精力。

C++ 總是具有更快、更高效的潛力,因為您可以更密切地控制所有重要的事情。 不利的一面是,您必須做所有重要的事情,而其他語言中的通用實現可能是由知道自己在做什么的人完成的,並且可能比 C++ 中的幼稚或快速實現要好

此外,您經常會發現瓶頸並不是您認為的那樣,例如,如果讀取數據的時間是計算的 20 倍,這並非不可能,那么計算速度有多快幾乎無關緊要。計算是。 即使對於有經驗的開發人員來說,關於瓶頸所在的直覺也常常是錯誤的。

http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=node&lang2=gpp

上面的鏈接已經死了,現在回不去了--

https://web.archive.org/web/20180324192118/http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=node&lang2=gpp

C++ 使用 CPU,執行數學運算的速度比 Node.js 快 10 倍。

該網站移至此處https://benchmarksgame-team.pages.debian.net/benchmarksgame/which-programs-are-fastest.html

我已經運行了@denshade 代碼來刪除打印和 100000 個數字的時間是例外:

  • 3 秒。 對於 nodejs!

  • 6 秒。 對於 gcc/clang 編譯的 c

  • 6 秒 對於 hhvm ( php )

  • 帶有 opcache 的 php7 需要14 秒

  • 沒有opcache 的 php7 需要15 秒

Nodejs 之所以如此之快,是因為它是隨着時間的推移而編譯和優化的。

所以,也許你只需要自己測試一下,在這種情況下,哪種語言最適合你的需求。

使用 C++ 進行復雜數學計算時要考慮的一件事是,您可能能夠利用現有的高性能庫,例如BLAS 、LAPACK、ARMA 等。其他開發人員已經投入大量時間和精力來提供高度優化的功能。 我懷疑您會為 JavaScript 找到類似級別的高性能庫。 當然,如果您在矩陣計算或線性代數方面遇到了瓶頸,那么這些 C++ 庫之一就是您要走的路。

以下是 Node.js 證明自己是完美技術合作伙伴的領域。

● I/O bound Applications
● Data Streaming Applications
● Data Intensive Real-time Applications (DIRT)
● JSON APIs based Applications
● Single Page Applications

不建議將 Node.js 用於 CPU 密集型應用程序。

這是 API 比較: https : //www.linkedin.com/pulse/nodejs-vs-java-which-faster-apis-owen-rubel

如果您的計算不重要,我想發出警告。 當您進行大量計算時,JavaScript 非常糟糕。 我的故事涉及一個簡單的素數程序,你可以在這里找到: https : //github.com/denshade/speedFun

長話短說。 我創建了一個簡單的,在 C 和 JavaScript 中實現的低效素數檢查函數。 兩者都以相同的方式實現。 前 2000 000 個素數在 C 中在 5 秒內驗證。 javascript 中的相同函數在 node.js 中運行時持續了 16 多個小時。

暫無
暫無

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

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