Apakah Python lebih cepat dan lebih ringan dari C ++? [Tutup]

92

Saya selalu berpikir bahwa kelebihan Python adalah readibility kode dan kecepatan pengembangan, tetapi waktu dan penggunaan memori tidak sebaik C ++.

Statistik ini sangat mengejutkan saya.

Apa pengalaman Anda memberitahu Anda tentang Python vs C ++ waktu dan penggunaan memori?

Alex
sumber
18
Jadi Pyhton untuk sebagian besar kasus ini lebih lambat dan menggunakan lebih banyak RAM tetapi sumbernya lebih kecil. Apa sebenarnya masalahnya?
nuriaion
2
Saya kira saya salah menafsirkan hasilnya.
Alex
6
Yang sangat menarik adalah bahwa tes C ++ masih 'lebih baik' daripada tes C!
gbjbaanb
9
@gbjbaanb: Tidak mengejutkan saya. C ++ telah menambahkan banyak fitur yang memungkinkan kode yang berpotensi lebih cepat. Jika Anda tahu apa yang Anda lakukan, C ++ bisa menjadi sangat efisien, lebih dari C. (Tentu saja, C ++ juga menyertakan beberapa fitur yang mengganggu kinerja, tetapi Anda tidak harus menggunakannya). Tetapi kepercayaan umum bahwa "C lebih cepat dari C ++" adalah salah. (dan pertanyaannya tidak terlalu berarti pada awalnya)
jalf
1
Tautan sudah mati
Arn

Jawaban:

240

Saya pikir Anda salah membaca statistik itu. Mereka menunjukkan bahwa Python hingga sekitar 400 kali lebih lambat dari C ++ dan dengan pengecualian satu kasus, Python lebih merupakan babi memori. Dalam hal ukuran sumber, Python menang mutlak.

Pengalaman saya dengan Python menunjukkan tren pasti yang sama bahwa Python berada di urutan antara 10 dan 100 kali lebih lambat dari C ++ ketika melakukan pengolah angka yang serius. Ada banyak alasan untuk ini, yang utama adalah: a) Python diinterpretasikan, sementara C ++ dikompilasi; b) Python tidak memiliki primitif, semuanya termasuk tipe bawaan (int, float, dll.) adalah objek; c) daftar Python dapat menampung objek dari tipe yang berbeda, jadi setiap entri harus menyimpan data tambahan tentang tipenya. Ini semua sangat menghambat baik waktu proses maupun konsumsi memori.

Ini bukan alasan untuk mengabaikan Python. Banyak perangkat lunak tidak memerlukan banyak waktu atau memori bahkan dengan faktor kelambatan 100 kali. Biaya pengembangan adalah tempat dimana Python menang dengan gaya yang sederhana dan ringkas. Peningkatan pada biaya pengembangan ini seringkali melebihi biaya cpu tambahan dan sumber daya memori. Namun, jika tidak, maka C ++ menang.

moinudin
sumber
111
Juga, orang-orang yang berbicara tentang Python lambat dalam menghitung angka yang serius belum menggunakan modul Numpy dan Scipy. Python sangat populer dalam komputasi ilmiah akhir-akhir ini. Tentu saja, kecepatannya berasal dari penggunaan modul yang ditulis dalam C atau pustaka yang ditulis dalam Fortran, tapi itulah keindahan bahasa scripting menurut saya.
Justin Peel
3
Saya yakin apa yang Anda katakan dan ini tautan untuk membuktikannya: blog.dhananjaynene.com/2008/07/…
ucefkh
2
Mengenai: c) daftar Python dapat menampung objek dari tipe yang berbeda, jadi setiap entri harus menyimpan data tambahan tentang tipenya. Daftar python sebenarnya adalah daftar penunjuk ke objek. Dalam python itu adalah nilai yang mengetahui tipenya, sedangkan variabel hanya penunjuk ke "objek nilai generik" (oleh karena itu bilangan genap tidak dapat diubah). Jadi daftar tidak menyimpan jenis isinya - hanya pointer. Anda benar tentang overhead memori - python memang harus menyimpan tipe dan konteks lain untuk nilai jenis apa pun.
Alex
jika Anda berbicara tentang cpython..lalu ya, tetapi pypy dalam banyak kasus sangat cepat (sebanding dengan java, 1/3 kecepatan java saya kira), subset python hampir secepat c ++ (lihat shedskin)
Quonux
1
@JustinPeel saya mempertanyakan apakah itu benar. bahkan ketika menggunakan numpydan scipy, pythonbasis kode yang besar kemungkinan besar memiliki banyak kode dalam python murni, membuat segalanya lebih lambat dari C++. skrip python mendekati kecepatan C++skrip sebagai persentase dari Ckodenya 100, di mana itu bukan lagi skrip python. python lepas landas, pasti, tetapi bukan karena secepat C++- karena lebih mudah digunakan.
dbliss
131

Semua penggunaan Python yang paling lambat (> 100x) dalam baku tembak adalah operasi ilmiah yang membutuhkan jumlah GFlop / s yang tinggi. Anda TIDAK harus menggunakan python untuk itu. Cara yang benar untuk menggunakan python adalah dengan mengimpor modul yang melakukan perhitungan tersebut, dan kemudian pergi menikmati sore yang santai bersama keluarga Anda. Itu adalah cara pythonic :)

Tim Lin
sumber
3
Saat ini ada beberapa kompiler Python-to-C ++ , jadi Python bisa secepat C ++ dalam beberapa kasus.
Anderson Green
26

Pengalaman saya sama dengan benchmark. Python bisa lambat dan menggunakan lebih banyak memori. Saya menulis lebih banyak, lebih sedikit kode dan bekerja pertama kali dengan lebih sedikit debugging. Karena mengelola memori untuk saya, saya tidak perlu melakukan manajemen memori, menghemat waktu untuk mengejar kebocoran inti.

Apa pertanyaanmu?

S. Lott
sumber
Saya hanya bingung dengan hasil benchmark. Ternyata saya salah menafsirkannya.
Alex
16

Ukuran sumber sebenarnya bukan hal yang masuk akal untuk diukur. Misalnya, skrip shell berikut:

cat foobar

jauh lebih pendek daripada yang setara dengan Python atau C ++.


sumber
35
Dan lebih mudah untuk mempertahankan bahwa versi Python atau C ++ yang lebih panjang juga. Saya berpendapat bahwa ukuran kode sumber itu penting, dan untuk tugas sederhana tertentu, skrip shell singkat itu bagus.
S. Lott
Saya juga percaya bahwa ukuran kode sumber sangat penting, dan untuk beberapa tugas, Bash adalah alat yang tepat untuk pekerjaan itu. Lihat contoh bagus yang membandingkan skrip bash sederhana dengan python di sini: innolitics.com/articles/programming-languages/… (Anda perlu menggulir ke bawah sedikit). Saya pikir ini adalah contoh yang sedikit lebih canggih daripada cat footer.
jdg
7

Juga: Psyco vs. C ++ .

Ini masih merupakan perbandingan yang buruk, karena tidak ada yang akan melakukan tolok ukur hal-hal yang rumit yang cenderung fokus pada Python murni. Yang lebih baik adalah membandingkan kinerja aplikasi yang realistis, atau C ++ versus NumPy, untuk mengetahui apakah program Anda akan terasa lebih lambat.

millimoose.dll
sumber
2
dengan kata lain - karena numbercrunchy lebih lambat menuliskannya dalam C ++ dan menyebutnya dari Python :-)
igouy
1
Jika Anda akan menggunakan perpustakaan dengan python untuk membuatnya lebih cepat, maka Anda mungkin juga menggunakan perpustakaan angka-angka di c ++. Dengan cara itu Anda menjaga fleksibilitas c ++ tanpa harus menulis banyak kode :)
SuperSim135
Itu adalah necro tak berguna tingkat dewa . OP secara harfiah menyatakan lebih memilih Python untuk keterbacaan dan kenyamanan, mengapa seseorang secara langsung menggunakan bahasa yang kurang mereka sukai, ketika mereka bisa mendapatkan sebagian besar manfaat kinerja dengan meminta penulis perpustakaan mengurusnya untuknya? Inti dari menggunakan perpustakaan tidak harus melakukan pekerjaan yang mereka lakukan dengan lebih baik sendiri, bahwa perpustakaan kebetulan merupakan pengikatan asli adalah detail pengoptimalan / penerapan.
millimoose
6

Masalahnya di sini adalah Anda memiliki dua bahasa berbeda yang menyelesaikan dua masalah berbeda ... ini seperti membandingkan C ++ dengan assembler.

Python adalah untuk pengembangan aplikasi yang cepat dan saat kinerja menjadi perhatian minimal.

C ++ bukan untuk pengembangan aplikasi yang cepat dan mewarisi kecepatan lama dari C - untuk pemrograman tingkat rendah.

jheriko
sumber
3

Ini masalah yang sama dengan bahasa pemrograman yang dikelola dan mudah digunakan seperti biasa - mereka lambat (dan terkadang memakan memori).

Ini adalah bahasa untuk mengontrol daripada memproses. Jika saya harus menulis aplikasi untuk mengubah gambar dan harus menggunakan Python juga, semua proses dapat ditulis dalam C ++ dan terhubung ke Python melalui binding sementara antarmuka dan kontrol proses pasti Python.

Migol
sumber
Library tersebut sudah ditulis untuk Python atau C atau Java, jadi mengapa tidak menggunakan bahasa dinamis untuk merekatkannya?
aoeu256
2

Saya pikir statistik tersebut menunjukkan bahwa Python jauh lebih lambat dan menggunakan lebih banyak memori untuk tolok ukur tersebut - apakah Anda yakin membacanya dengan benar?

Dalam pengalaman saya, yang sebagian besar dengan menulis program yang terikat jaringan dan sistem file dengan Python, Python tidak jauh lebih lambat dalam hal apa pun yang penting. Untuk jenis pekerjaan itu, manfaatnya lebih besar daripada biayanya.

RichieHindle
sumber
Memang. Ketika kinerja menjadi masalah, apa yang bisa dilakukan python adalah mengikat modul eksternal berkinerja tinggi, atau membuat prototipe sistem dan kemudian membiarkan kemacetan (biasanya jauh di dalam loop dalam) untuk ditulis ulang sebagai modul C, dll.
xan