30/09/2018, 17:06
Đua tốc độ Python, Golang và C
Test tìm số nguyên tố từ 1-1000000 sử dụng thuật toán cơ bản
C hoàn thành trong 42s 221s
Golang :224s
Python: Không thể chờ được (hơn 900s chưa xong) , chắc phải gọi à turthon mất
##Code test:
- C
#include <conio.h>
#include <stdio.h>
#include <windows.h>
int main ( )
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO consoleInfo;
WORD saved_attributes;
SetConsoleTextAttribute(hConsole, FOREGROUND_GREEN);
int n,i;
printf("@thanhmssl10 diễn đàn
'C' Prime test
1- 1000000
Enter to start!
");
getch();
for (n=1;n<=1000000;n++)
for(i=2;i<n;i++)
{
if (n%i==0)
break;
else if( i==n-1)
printf("
%d",n);
}
printf("
DONE!");
getch()
;
}
- Python
raw_input("@thanhmssl10 diễn đàn
'Python' Prime test
1- 1000000
Enter to start!
")
for n in range(1,1000000):
for i in range(2,n-1):
if n%i==0:
break
elif i==n-2:
print "%d" % n
print "
DONE!"
- Golang
package main
import "fmt"
func main() {
fmt.Printf("@thanhmssl10 diễn đàn
'GOlang' Prime test
1- 1000000
Enter to start!
")
var a int
fmt.Scanf("%d
",&a)
for n := 0; n < 1000000; n++ {
for i:=2;i<n;i++{
if n%i==0 {
break
}else if i==n-1{
fmt.Printf("
%d",n)
}
}
}
fmt.Printf("
DONE!")
}
- Đếm giờ (Chạy bằng lệnh cmd)
echo off && color c && for /l %i in (1,1,10) do timeout 1 >nul && echo %is
Bài liên quan
Cứ tưởng Golang đứng đầu chứ nhỉ ?
Quan trọng là bạn dùng thuật toán gì.
thì nó phải biên dịch xong rồi chạy
###python sieve 10^6
###test với golang
0.01s 789504KB
Em vừa đo lại thì C với Go ngang nhau , em dùng thuật toán bình thường ạ, không dùng cả sqrt luôn
Vẫn thua C 1 tí
chú theo đường nghiên cứu được đấy, a bó tay giờ chạy in ra dòng print của C còn không biết
Em nghịch chơi thôi, cũng không định đi sâu vào C/py/go
thời gian thưởng thức đấy bác ạ
Mình muốn thử ông python thế nào thôi , ai ngờ nó chậm quá
Trước em cũng có dùng Python. Nhưng mà chạy trên ĐT S60 cơ. Cũng nặng máy với ì ạch lắm
À đúng rồi , quên mất chưa thử trên android
@gio Anh có biết thuật toán nào mà người ta hay dùng để test tốc độ các ngôn ngữ không ạ ,
Fastest way to list all primes below N
Mình tưởng điều này ai cũng biết chứ nhỉ . Cái đó là sự đánh đổi giữa thời gian thực thi và thời gian phát triển. Đương nhiên trong nhiều trường hợp với yêu cầu không quá cao, việc lựa chọn thời gian phát triển nhanh hơn nhưng tốc độ thực thi thấp hơn đem lại nhiều hiệu quả hơn về thời gian và chi phí.
Python có những cách riêng để tăng tốc chương trình, nhưng đương nhiên sẽ không bằng các ngôn ngữ static được.
Golang mình nghe cũng lâu rồi mà chưa tìm hiểu sao nó đạt được hiệu năng như vậy, không biết có cao nhân nào ở đây không :p?
Mình cũng thấy mọi người bảo chậm rồi nhưng mà không nghĩ nó chậm quá như vậy
cho bác cái link để xem http://fengmk2.com/blog/2011/fibonacci/nodejs-python-php-ruby-lua.html, không thể so sánh python được vì nó là ngôn ngữ động, trong khi 2 bác kia là tĩnh
Bác giải thích cho em cụm thời gian phát triển này được ko cám ơn bác.
Tốc độ thực thi nhanh là 1 trong những nguyên nhân khiến C/C++ dùng nhiều trong ngành tài chính (nhất là high frequency trade) thì phải :-?
Lại còn được ông ruby nữa , vậy mới thấy không cần nhanh mà vẫn có thể làm nên chuyện
Thêm Assembly vào kết quả so sánh nữa đi!
Để khi nào test thử xem, nhưng mình nghĩ ASM sẽ nhanh hơn C một chút, vì thấy nó “chân chất” lắm , nhưng viết thì hơi phức tạp
Thời gian phát triển là thời gian để bạn thiết kế, viết code, kiểm thử và bảo trì ý mà (và cả phát triển thêm tính năng sản phẩm sau này nữa). Các ngôn ngữ động (dynamic) như python, ruby thường có thời gian phát triển một sản phẩm rất nhanh, đánh đổi lại là hiệu năng đôi khi chậm hơn 100 lần so với C, C++ và vài chục lần so với Java, C# (Trong trường hợp xấu nhất).
Nhưng thời gian thực thi thì do thằng CPU nó làm, cùng lắm là tốn… tiền điện, còn thời gian phát triển bạn phải đánh đổi bằng thời gian thực và chi phí thực của lập trình viên.
Trên thực tế, việc chậm hơn vài chục lần nghe có vẻ tệ, nhưng trong giai đoạn đầu phát triển thì vấn đề này không ảnh hưởng rõ rệt, khi đã đến một múc độ phát triển nhất định, có số lượng người dùng lớn, cần chú ý đến hiệu năng thực thi thì có thể tách một số module để viết trên các ngôn ngữ khác sau. Điển hình như youtube, họ xây dựng ban đầu trên python, bây giờ vẫn còn nhiều phần viết trên python và họ vẫn đảm bảo tốc độ cực kỳ tốt.
Cám ơn bạn nhé, mình cũng mường tượng ra nhưng nghe bạn giải thíhc thì hiểu rõ hơn nhiều
đang học C hehehe