مقایسه سرعت اجرا کد زبانهای برنامهنویسی با محاسبات یکسان
در دنیای برنامهنویسی، انتخاب زبان مناسب برای یک پروژه میتواند تأثیر زیادی بر عملکرد، سرعت توسعه و نگهداری نرمافزار داشته باشد. به همین دلیل، انجام بنچمارکها (Benchmark) برای مقایسه عملکرد زبانهای مختلف برنامهنویسی امری ضروری است. بنچمارکها به ما این امکان را میدهند که با اندازهگیری زمان اجرای کد و مصرف منابع، نقاط قوت و ضعف هر زبان را شناسایی کنیم.
هدف از ایجاد این بنچمارکها، مقایسه عملکرد پنج زبان برنامهنویسی محبوب شامل Rust، C++، Golang، PHP و Python است. با بررسی زمان اجرای یک تابع خاص در این زبانها، میتوانیم درک بهتری از کارایی هر زبان در شرایط مشابه به دست آوریم. این اطلاعات میتواند به توسعهدهندگان کمک کند تا زبان مناسبتری را برای پروژههای خود انتخاب کنند و در نهایت به بهبود کیفیت و کارایی نرمافزارها منجر شود.
سرعت اجرای پایتون
زبان محبوب پایتون که یک زبان مفسری هستش سرعت زیاد جالبی نداره بذار یه نگاه به کد بندازیم:
import time import math from platform import python_version def heavy_computation(n): sum = ۰.۰ for i in range(۱, n + ۱): sum += math.sin(i) * math.cos(i) return sum if __name__ == "__main__": n = 10_000_000 # تعداد تکرارها start_time = time.time() result = heavy_computation(n) end_time = time.time() duration_ms = (end_time - start_time) * ۱۰۰۰ # تبدیل به میلیثانیه print(f"Result: {result}") print(f"Python Time taken: {duration_ms:.2f} ms, version ",python_version())
کد اجرای محسابات سنگین پایتون
خب حالا چند بار کد رو اجرا می کنیم نتیجه رو میبنیم:
$ python3 python-bench-mark.py Result: -0.13399488603942475 Python Time taken: 985.97 ms, version 3.11.2 $ python3 python-bench-mark.py Result: -0.13399488603942475 Python Time taken: 1027.61 ms, version 3.11.2 $ python3 python-bench-mark.py Result: -0.13399488603942475 Python Time taken: 1003.12 ms, version 3.11.2 $ python3 python-bench-mark.py Result: -0.13399488603942475 Python Time taken: 972.77 ms, version 3.11.2 $ python3 python-bench-mark.py Result: -0.13399488603942475 Python Time taken: 994.71 ms, version 3.11.2
بنابراین، میانگین زمان اجرای برنامه پایتون برای ۱۰ میلیون اجرا حدود ۹۹۶.۸۴ میلیثانیه است.
سرعت اجرای C++
زبان قدرتمند سی پلاس پلاس با این تفاوت که کد های کامپایل شده به زبان ماشین تبدیل میشوند، عملکرد خیلی خوبی داره اول یه نگاهی به کد بندازیم:
#include <iostream> #include <cmath> #include <chrono> double heavyComputation(unsigned long long n) { double sum = ۰.۰; for (unsigned long long i = ۱; i <= n; ++i) { sum += sin(i) * cos(i); } return sum; } int main() { unsigned long long n = ۱۰'۰۰۰'۰۰۰; // تعداد تکرارها auto start = std::chrono::high_resolution_clock::now(); double result = heavyComputation(n); auto end = std::chrono::high_resolution_clock::now(); std::chrono::duration<double, std::milli> duration = end - start; std::cout << "Result: " << result << std::endl; std::cout << "C++ Time taken: " << duration.count() << " ms, version " << __GNUC__ << "." << __GNUC_MINOR__ << "." << __GNUC_PATCHLEVEL__ << " (GNU Compiler Collection)" << std::endl; return ۰; }
$ g++ -o cpp-bench-mark cpp-bench-mark.cpp -O3 $ ./cpp-bench-mark Result: -0.133995 C++ Time taken: 128.256 ms, version 12.2.0 (GNU Compiler Collection) $ ./cpp-bench-mark Result: -0.133995 C++ Time taken: 124.704 ms, version 12.2.0 (GNU Compiler Collection) $ ./cpp-bench-mark Result: -0.133995 C++ Time taken: 127.906 ms, version 12.2.0 (GNU Compiler Collection) $ ./cpp-bench-mark Result: -0.133995 C++ Time taken: 127.203 ms, version 12.2.0 (GNU Compiler Collection) $ ./cpp-bench-mark Result: -0.133995 C++ Time taken: 126.028 ms, version 12.2.0 (GNU Compiler Collection)
بنابراین، میانگین زمان اجرای برنامه C++ با ۱۰ میلیون تکرار حدود ۱۲۶.۶۲ میلیثانیه است.
زمان اجرای کد در PHP به صورت cli
و اما php هم یک زبان مفسری کند به حساب میادش بیایم با هم ببینیم سرعت php در اجرا همین محسابات چطور هستش، پس ابتدا کد رو نگاه کنیم تا به نتیجه برسیم:
<?php function heavyComputation($n) { $sum = ۰.۰; for ($i = ۱; $i <= $n; $i++) { $sum += sin($i) * cos($i); } return $sum; } $n = ۱۰۰۰۰۰۰۰; // تعداد تکرارها $startTime = microtime(true); $result = heavyComputation($n); $endTime = microtime(true); $durationMs = ($endTime - $startTime) * ۱۰۰۰; // تبدیل به میلیثانیه echo "Result: $result\n"; echo "PHP Time taken: " . number_format($durationMs, ۲) . " ms, version ".PHP_VERSION." \n";
همین محاسبات در زبان PHP 8.2
حالا ببینیم سرعت اجرای آن به چه نحوی بوده:
$ php php-bench-mark.php Result: -0.13399488603942 PHP Time taken: 437.45 ms, version 8.2.24 $ php php-bench-mark.php Result: -0.13399488603942 PHP Time taken: 440.55 ms, version 8.2.24 $ php php-bench-mark.php Result: -0.13399488603942 PHP Time taken: 453.95 ms, version 8.2.24 $ php php-bench-mark.php Result: -0.13399488603942 PHP Time taken: 436.33 ms, version 8.2.24 $ php php-bench-mark.php Result: -0.13399488603942 PHP Time taken: 455.75 ms, version 8.2.24
بر خلاف تصور خودم، میانگین زمان اجرای برنامه PHP شما حدود ۴۴۴.۶۱ میلیثانیه است یعنی تو این مورد از پایتون سریع تر بود!
سرعت اجرای کد در زبان GO
همانطور که میدانید گو لنگ یا زبان GO یکی از زبانهای سریع هستش و تبدیل به کد ماشین میشه بیایم با هم کدشو یه نگاهی بندازیم:
package main import ( "fmt" "math" "time" "runtime" ) func heavyComputation(n uint64) float64 { var sum float64 for i := uint64(۱); i <= n; i++ { sum += math.Sin(float64(i)) * math.Cos(float64(i)) } return sum } func main() { n := uint64(10_000_۰۰۰) // تعداد تکرارها start := time.Now() result := heavyComputation(n) duration := time.Since(start) fmt.Printf("Result: %f\n", result) fmt.Printf("Golang Time taken: %d ms, version %s \n", duration.Milliseconds(),runtime.Version()) }
همین کد مشابه در go lang
حالا وقتشه ببینیم سرعت اجرای کد در حالت release چطوره:
$ ./go-bench-mark Result: -0.133995 Golang Time taken: 175 ms, version go1.24.3 $ ./go-bench-mark Result: -0.133995 Golang Time taken: 175 ms, version go1.24.3 $ ./go-bench-mark Result: -0.133995 Golang Time taken: 174 ms, version go1.24.3 $ ./go-bench-mark Result: -0.133995 Golang Time taken: 175 ms, version go1.24.3 $ ./go-bench-mark Result: -0.133995 Golang Time taken: 176 ms, version go1.24.3
بنابراین، میانگین زمان اجرای برنامه Golang شما ۱۷۵ میلیثانیه است، و بسیار قابل قبول هستش.
اما سرعت اجرا در Rust سلطان امنیت
اما rust یکی از سریعترین و گدا ترین ( مصرف منابع کم) زبانهای برنامهنویسی هستش، ( به قول احمد ذوقی این گَدایه 😂) ولی ببینیم کد ها تو راست به چه شکلی میشن:
use std::time::Instant; use rustc_version ; fn heavy_computation(n: u64) -> f64 { let mut sum = ۰.۰; for i in ۱..=n { sum += (i as f64).sin() * (i as f64).cos(); } sum } fn main() { let n = 10_000_000; // تعداد تکرارها let start = Instant::now(); let result = heavy_computation(n); let duration = start.elapsed(); println!("Result: {}", result); let v = rustc_version::version().unwrap(); println!("Rust Time taken: {:?}, version {}", duration, format!("{}.{}.{}", v.major, v.minor, v.patch)); }
خب اینم کد راست بودش
بریم سراغ نتیجه ببینیم rust چی کاره است البته در حالت کامپایل release :
$ cargo build --release Compiling rust-bench-mark v0.1.0 (/home/freeman/Projects/rust/rust-bench-mark) Finished `release` profile [optimized] target(s) in 0.10s $ ./target/release/rust-bench-mark Result: -0.13399488603942475 Rust Time taken: 128.895193ms, version 1.83.0 $ ./target/release/rust-bench-mark Result: -0.13399488603942475 Rust Time taken: 127.833402ms, version 1.83.0 $ ./target/release/rust-bench-mark Result: -0.13399488603942475 Rust Time taken: 121.097153ms, version 1.83.0 $ ./target/release/rust-bench-mark Result: -0.13399488603942475 Rust Time taken: 127.868654ms, version 1.83.0 $ ./target/release/rust-bench-mark Result: -0.13399488603942475 Rust Time taken: 126.760833ms, version 1.83.0
بنابراین، میانگین زمان اجرای برنامه Rust حدود ۱۲۶.۴۹ میلیثانیه است. فوقالعاده به نظر میرسه
سرعت اجرا در Javascript روی سکوی nodejs
const { performance } = require('perf_hooks'); function heavyComputation(n) { let sum = ۰.۰; for (let i = ۱; i <= n; i++) { sum += Math.sin(i) * Math.cos(i); } return sum; } const n = 10_000_000; // تعداد تکرارها const start = performance.now(); const result = heavyComputation(n); const duration = performance.now() - start; console.log(`Result: ${result}`); console.log(`JavaScript Time taken: ${duration} milliseconds, version `+ process.versions.node);
کد همین محسابات در زبان همه کاره js
و اما نتیجه:
$ node js-bench-mark.js Result: -0.13399488603953993 JavaScript Time taken: 1311.600597 milliseconds, version 22.14.0 $ node js-bench-mark.js Result: -0.13399488603953993 JavaScript Time taken: 1316.990528 milliseconds, version 22.14.0 $ node js-bench-mark.js Result: -0.13399488603953993 JavaScript Time taken: 1309.816444 milliseconds, version 22.14.0 $ node js-bench-mark.js Result: -0.13399488603953993 JavaScript Time taken: 1318.06167 milliseconds, version 22.14.0 $ node js-bench-mark.js Result: -0.13399488603953993 JavaScript Time taken: 1311.352516 milliseconds, version 22.14.0 $ node js-bench-mark.js
میانگین js از همه بدتره: ۱۳۱۷.۷۶ به بزرگی خودتون ببخشیدش دیگه D:
مشخصات سیستم من برای این مقایسه
بهتره حتما بدونیم مشخصات PC من چی بوده که این نتیجه رو ازش کردم
- پردازنده: Intel® Core™ i7-9700K × ۸
- مادربورد: Micro-Star International Co., Ltd. MS-7B51
- میزان RAM: 64gig
- سیستم عامل: Debian 12
نتیجه گیری
نتیجهگیری از مقایسه زمانهای اجرای کد در شش زبان برنامهنویسی مختلف نشان میدهد که زبان Rust با میانگین زمان اجرای حدود ۱۲۶.۴۹ میلیثانیه، بهترین عملکرد را در این آزمایش داشته است. پس از آن، زبان C++ با میانگین ۱۲۶.۶۲ میلیثانیه در رتبه دوم قرار دارد. زبان Golang با زمان اجرای ۱۷۵ میلیثانیه در رتبه سوم و PHP با میانگین ۴۴۴.۶۱ میلیثانیه در رتبه چهارم قرار دارد. زبان Python با میانگین زمان اجرای ۹۹۶.۸۴ میلیثانیه در رتبه پنجم و در نهایت، زبان JavaScript با میانگین ۱۳۱۷.۷۶ میلیثانیه در رتبه ششم قرار گرفته است. این نتایج نشاندهنده کارایی بالای زبانهای Rust و C++ در پردازشهای سریع است، در حالی که Python و JavaScript زمانهای بیشتری را برای اجرای کد نیاز دارند. این اطلاعات میتواند به توسعهدهندگان در انتخاب زبان مناسب برای پروژههای خود کمک کند و نشاندهنده اهمیت انتخاب زبان مناسب بر اساس نیازهای عملکردی است.
نام زبان | ورژن | سرعت اجرای کد (ms) | رتبه |
---|---|---|---|
Python | ۳.۱۱.۲ | ۹۹۶.۸۴ | ۵ |
C++ | ۱۲.۲.۰ | ۱۲۶.۶۲ | ۲ |
PHP | ۸.۲.۲۴ | ۴۴۴.۶۱ | ۴ |
Golang | ۱.۲۴.۳ | ۱۷۵ | ۳ |
Rust | ۱.۸۳.۰ | ۱۲۶.۴۹ | ۱ |
JavaScript | ۲۲.۱۴.۰ | ۱۳۱۷.۷۶ | ۶ |
توضیحات:
- رتبه بر اساس سرعت اجرای کد (کمترین زمان بهترین رتبه را دارد).
- زمانها به میلیثانیه (ms) هستند.
این جدول به شما کمک میکند تا عملکرد هر زبان را در مقایسه با دیگر زبانها مشاهده کنید.
اگر زبان برنامهنویسی دیگری نیز دوست دارید به این لیست اضافه بشه تو کامنت ها بهم بگید
بدرود – A1Gard
دیدگاهتان را بنویسید لغو پاسخ