مقایسه سرعت زبان های برنامه نویسی با نوشتن یک کد به تمام آن ها
سلام دوستان
بنده یه کد ساده رو به انواع زبان های برنامه نویسی نوشتم و حالا میخوام ببینم سرعت اجرا کدام یک سریع تر هست
البته لازم به ذکر هست که این کار سرعت واقعی زبان ها رو نشون نمیده چون بعضی زبان ها رم و پردازنده رو نابود می کنن برای سرعت بالاتر
و بعضی دیگر مثلا در بخش حلقه for سرعت بیش تری از بقیه دارن
چند روز پیش تو یوتیوب یه فیلم دیدم یارو اومده بود ببینه پایتون سریع تر یک میلیون بار یک عبارتی رو چاپ میکنه یا سی پایتون با اختلاف برنده شد ولی آیا این دلیل میشه سرعت و پرفورمنس پایتون از سی بهتره؟ خیر
ولی در هر صورت بنده تصمیم گرفتم یه همچین حرکتی بزنم و زمان اجرا شدن یک کد یکسان در زبان های برنامه نویسی مختلف رو اندازه بگیرم
زبان هایی که قصد داریم بررسی کنیم:
1) c
2) c++
3) c#
4) java
5) javascripts
6) lua
7) php
8) python
9) rust
1) سی
#include <stdio.h>
#include <time.h> // for clock_t, clock(), CLOCKS_PER_SEC
#include <unistd.h>
int main()
{
double time_spent = 0.0;
clock_t begin = clock();
int x = 0;
for(int i = 0; i < 20000; i++)
{
for(int j = 20000; j > 0; j--)
{
if (i == j)
{
x++;
}
else
{
x--;
}
}
}
printf("Integer Value = %d", x);
clock_t end = clock();
time_spent += (double)(end - begin) / CLOCKS_PER_SEC;
printf("The elapsed time is %f seconds", time_spent);
return 0;
}
زمان: 1.027822 ثانیه
سی پلاس پلاس
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
int main()
{
auto start = high_resolution_clock::now();
int x = 0;
for(int i = 0; i < 20000; i++)
{
for(int j = 20000; j > 0; j--)
{
if (i == j)
{
x++;
}
else
{
x--;
}
}
}
cout << x << endl;
auto stop = high_resolution_clock::now();
auto duration = duration_cast<microseconds>(stop - start);
cout << "Time taken by function: "
<< duration.count() << " microseconds" << endl;
return 0;
}
زمان: 1.059398
سی شارپ
using System;
using System.Diagnostics;
class HelloWorld {
static void Main() {
var watch = Stopwatch.StartNew();
int x = 0;
for(int i = 0; i < 20000; i++)
{
for(int j = 20000; j > 0; j--)
{
if (i == j)
{
x++;
}
else
{
x--;
}
}
}
Console.WriteLine(x);
Console.WriteLine(
$"The Execution time of the program is {watch.ElapsedMilliseconds}ms");
}
}
زمان: 0.678
جاوا
import java.io.*;
import java.lang.*;
public class Main
{
public static void main(String[] args) {
long start = System.nanoTime();
int x = 0;
for(int i = 0; i < 20000; i++)
{
for(int j = 20000; j > 0; j--)
{
if (i == j)
{
x++;
}
else
{
x--;
}
}
}
System.out.println(x);
long end = System.nanoTime();
long exec = end - start;
double inSeconds = (double)exec / 1_000_000_000.0;
System.out.println("The program takes "+exec+" nanoseconds that is "+inSeconds+" seconds to execute.");
}
}
زمان: 0.244683161 ثانیه
JavaScripts
<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>
<script>
console.time('codezup')
x = 0;
for (let i = 0; i < 20000; i++) {
for (let j = 20000; j > 0; j--) {
if (j === i) {
x++;
}
else
{
x--;
}
}
}
document.getElementById("demo").innerHTML = x;
console.timeEnd('codezup')
</script>
</body>
</html>
قابل ذکر هست تایم اجرا شدن جاوااسکریپت در کنسول مرورگر نوشته میشه
زمان: 0.92779004 ثانیه
Lua
x=0
for i=1,20000 do
for j=1,20000 do
if i == j then
x = x+1
else
x = x-1
end
end
end
print(x)
زمان: 13 ثانیه
برای lua نتونستم کدی گیر بیارم که تایم رو حساب کنه بنا بر این رفتم سراغ این وب سایت:
Online Lua Compiler - Online Lua Editor - Run Lua Online - Online Lua Runner (jdoodle.com)
php
<?php
$start = microtime(true);
$x = 0;
for($i = 0; $i < 20000 ; $i++){
for($j = 20000 ; $j > 0 ; $j--){
$x = $i == $j ? $x + 1 : $x - 1 ;
}
}
echo $x;
$end = microtime(true);
$exec_time = ($end - $start);
echo " The execution time of the PHP script is : ".$exec_time." sec";
?>
زمان: 6.6090450286865
Python
import time
st = time.time()
x = 0
res = sum([x + 1 if i == j else x - 1 for i in range(20000) for j in range(20000,0,-1)])
print(res)
et = time.time()
# get the execution time
elapsed_time = et - st
print('Execution time:', elapsed_time, 'seconds')
زمان: 28.512484550476074 ثانیه
Rust
use std::time::{Duration, Instant};
fn main() {
let now = Instant::now();
let mut x = 0;
for i in 0..20000 {
for j in 0..20000 {
if i == j {
x += 1;
} else {
x -= 1;
}
}
}
println!("{}",x);
let max_nanoseconds = u64::MAX / 1_000_000_000;
let duration = Duration::new(max_nanoseconds, 0);
println!("{:?}", now + duration);
}
زمان: 3.13346709 ثانیه
پایان.