Этот вопрос закрыт для ответов, так как повторяет вопрос Почему мне кажется, что Python быстрее C?
mr_qpdb
@mr_qpdb
⏱ - is not eternal

Python vs C. Какой из них быстрее?

Всем привет!
В интернете пишут, что самый быстрый язык программирования - язык C. И с этим не поспорить, потому что он работает на более низком уровне, чем Python. Но сейчас для интереса я запустил обычный цикл While от нуля до миллиона, и Python выполнился НАМНОГО быстрее, чем на C.
В чем проблема? Или это миф, что C быстрее, чем Python?

Коды:

Python:
i = 0
while i < 1000000:
    print(i)
    i += 1


C:
#include <stdio.h>

int main() {
    long long int i = 0;
    while (i < 1000000) {
        printf("%d\n", i);
        i++;
    }

    return 0;
}
  • Вопрос задан
  • 1011 просмотров
Решения вопроса 1
vabka
@vabka
Токсичный шарпист
Хорошо написанный, и скомпилированный в -o3 код на си, как правило, будет быстрее и эффективнее аналогичного кода на питоне.
В вашем случае неизвестно, почему вы могли получить такие результаты (даже не сказано, какие)

А какой используется интерпретатор?
А как был скомпилирован код на си?
На одном и том же железе происходил запуск? Условия равны?
Чем print на питоне отличается от сишного printf?
Как вообще происходил замер? Было ли учтено время на запуск интерпретатора?
Сколько было замеров? Может в случае с си был аномально медленный прогон?

UPD: Короче хз, как вы там меряли, но вот мой вариант
Для C я использовал Tiny C compiler, чтобы дать питону фору (будет учитываться время на компиляцию), да и оптимизации тут будут не такие дикие, как в GCC
Чтобы не тестировать скорость вывода на экран - вывод я перенаправил в /dev/null (Хз что это за заклинание такое, но я его нашёл на SO)
Запускал всё на WSL2 по одному разу, но в принципе результат очень даже стабилен.
Вот результат:
vabka@DESKTOP-7AFIA69:~/repos$ time (python3 test.py) 2>&1 1>/dev/null

real    0m0.381s
user    0m0.359s
sys     0m0.016s
vabka@DESKTOP-7AFIA69:~/repos$ time (tcc -run test.c) 2>&1 1>/dev/null

real    0m0.081s
user    0m0.047s
sys     0m0.031s
vabka@DESKTOP-7AFIA69:~/repos$ cat test.c
#include <stdio.h>

int main() {
  int i = 0;
  while(i < 1000000) {
    printf("%d\n", i);
    i++;
  }
  return 0;
}
vabka@DESKTOP-7AFIA69:~/repos$ cat test.py
i = 0
while i < 1000000:
  print(i)
  i += 1

vabka@DESKTOP-7AFIA69:~/repos$

Питон получился в 4 раза медленнее.

Вот ещё результат без /dev/null:
Для C:
real    0m58.757s
user    0m1.094s
sys     0m11.078s


Для питона:
real    1m1.762s
user    0m2.953s
sys     0m13.594s


Результат тоже хуже, но тут очень много времени тратится на вывод в консоль, по тому разница почти не видна.
Ответ написан
Ответы на вопрос 4
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Попробуйте сделать вывод в файл. Запускайте с "> output.txt". У меня си работает в несколько раз быстрее (меньше секунды), питон - пару секунд.

Вывод в консоль тормозит, потому что при компиляции через mingw идет как бы эмуляция линуксовой консоли, которая преобразуется в виндовую. Питон же наверняка работает нативно. Если вы интерпретатор питона из исходников на mingw соберете, то будет работать столько же. В этом примере вы разницу не намеряете, потому что тут вы в основном тестируете скорость вывода в консоль. Замените вывод на вычисления, или что-то другое полезное, и у си будет в разы быстрее питона.
Ответ написан
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
Или это миф, что C быстрее, чем Python?

Да нет, миф - это то, что таким топорным способом можно хоть что-то померять. Для того, чтобы мерять такие абсолютно бессмысленные вещи, как скорость работы компилируемого языка против скорости работы интерпретируемого языка нужно соблюсти сто тыщ мильенов условий и все равно сравнение будет чушью.

Жигули, КАМАЗ и Бентли - это все автомобили. Но они сделаны для разных вещей, и будут хороши в той вещи, для чего были сделаны и плохи в тех вещах, для чего их не предназначали
Ответ написан
yupiter7575
@yupiter7575
Python программист
Скорость языка теперь считается в том, на сколько он быстро выводит текст? И вообще, скорее всего вы не правильно считаете. Как вы можете одновременно запустить две программы? Ключевое слово одновременно. Даже если у вас получилось, вы начали считать скорость с момента запуска скрипта пайтон или с момента его интерпретации? Тот же вопрос относится к Си, вы учли что на компиляцию уходит время?

Если вы хотите и вправду узнать скорость языка, возьмите задачу по серьезнее. Напишите например бота для игры в шахматы, чтобы он продумывал на 30 ходов вперед, здесь то вы и узнаете настоящую скорость языка. Так же в модуле time (говорю за пайтон), есть специальные функции которые могут посчитать скорость работы скрипта вплоть до миллионной доли секунды
Ответ написан
hugga
@hugga
Вообще я думаю этот вопрос ввёл в ступор многих здесь)
Просто представьте аналогию, человек-переводчик диктора с китайского языка априори не сможет выдать перевод быстрее самого диктора. Переводчик здесь, грубо - python.
Для интереса сравнения результатов работы ЯП можете посетить сайт benchmarksgame-team
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы