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

[Hướng dẫn làm ảnh Gif][1]

##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
Làm giàu, làm giàu, làm giàu..... viết 19:19 ngày 30/09/2018

Cứ tưởng Golang đứng đầu chứ nhỉ ?

Gió viết 19:16 ngày 30/09/2018

Quan trọng là bạn dùng thuật toán gì.

  • golang theo mình nghĩ test golang thì phải build ra rồi mới run dc.
$> go run primes.go

thì nó phải biên dịch xong rồi chạy

###python sieve 10^6

#kết quả
time: 0.69 memory: 8776 signal:0
number of primes: 78498
0-100: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
5 last primes [999953, 999959, 999961, 999979, 999983]

###test với golang

0.01s 789504KB

Thành Phạm viết 19:18 ngày 30/09/2018

Quan trọng là bạn dùng thuật toán gì. - golang theo mình nghĩ test golang thì phải build ra rồi mới run dc

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

Cứ tưởng Golang đứng đầu chứ nhỉ ?

Vẫn thua C 1 tí

Làm giàu, làm giàu, làm giàu..... viết 19:18 ngày 30/09/2018

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

Thành Phạm viết 19:09 ngày 30/09/2018

Em nghịch chơi thôi, cũng không định đi sâu vào C/py/go

Hoàng Kiên viết 19:06 ngày 30/09/2018

thời gian thưởng thức đấy bác ạ

Thành Phạm viết 19:16 ngày 30/09/2018

Mình muốn thử ông python thế nào thôi , ai ngờ nó chậm quá

Hoàng Kiên viết 19:11 ngày 30/09/2018

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

Thành Phạm viết 19:08 ngày 30/09/2018

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 ạ ,

Nguyễn Đức Minh viết 19:17 ngày 30/09/2018
stackoverflow.com
Robert William Hanks

Fastest way to list all primes below N

python, math, optimization, primes
answered by Robert William Hanks on 05:49AM - 14 Jun 10
Itachi Citus viết 19:07 ngày 30/09/2018

Mình muốn thử ông python thế nào thôi , ai ngờ nó chậm quá

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?

Thành Phạm viết 19:16 ngày 30/09/2018

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

Duy Thien viết 19:22 ngày 30/09/2018

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

(^_^) c > java > go > scala > luajit > nodejs > ruby 2.0.0-p0 > pypy > ruby 1.9.3+ > lua > php > python > perl > ruby 1.8.x (T_T)

lx viết 19:16 ngày 30/09/2018

Cái đó là sự đánh đổi giữa thời gian thực thi và thời gian phát triển.

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 :-?

Thành Phạm viết 19:17 ngày 30/09/2018

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

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

Nguyễn Trung Tín viết 19:11 ngày 30/09/2018

Thêm Assembly vào kết quả so sánh nữa đi!

Thành Phạm viết 19:21 ngày 30/09/2018

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

Itachi Citus viết 19:20 ngày 30/09/2018

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.

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.

lx viết 19:11 ngày 30/09/2018

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

ntd viết 19:08 ngày 30/09/2018

đang học C hehehe

Bài liên quan
0