@pro100chel

Почему Python быстрее C?

Написал две програмки. Одна на Си, другая на Питоне.
Обе идентичны по смыслу. Смысл такой. Есть переменная i. В бесконечном цикле она выводится на экран и потом инкрементируется.
Си я так понимаю считается быстрым языком. Питон же иначе считается медленным языком. Хотя некоторые пишут что это не так.
Непонятно в итоге что же все-таки быстрее.
Я понимаю, что этот цикл не показатель скорости, но все же интересно почему так происходит.

Вот код на Си:
#include <stdio.h>

int main()
{
	int i = 0;
	while(1 == 1) {
		printf("%i\n", i);
		i += 1;
	}
	scanf("%i", &i);
	return 0;
}


Вот код на Питоне:
i = 0
while True:
	print(i)
	i += 1
  • Вопрос задан
  • 931 просмотр
Решения вопроса 3
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Давно известно, что синтетические тесты измеряют только скорость самих синтетических тестов.
Ответ написан
CityCat4
@CityCat4
У тролля даже мозги - и то каменные!
Ну, во-первых, код не идентичен. Где аналог scanf() в питоновском коде?
Во-вторых, код на С написан местами криво - по учебнику писали что ли?
В-третьих ничего не сказано о ключах сборки программы на С - а это огого какое значение имеет.
В-четвертых, мерять скорость вывода в консоль - конечно же офигенно умная задача
Ответ написан
solotony
@solotony
code for food, caviar preferably
подобные примитивные операции все современные языки будут +- одинаково исполнять. разнеицу в быстродействии вы увидите на тяжелых операциях - память, объекты...
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
@menkar3
Вкратце - в теории, при правильном написании быстрее написанного человеком кода на си может быть только код, написанный человеком прямо на асме. На практике - код на асме, скорее всего, будет медленнее - компилятор си знает кучу всего, чего человек может не знать/не учесть, так что сгенерит код эффективнее.
По этому случаю - тут слишком много вопросов)
Какая ось? Чем собирали сишный код? Может, c код вы в дебаге собрали?)
Ну вот пример убунты (python3 vs gcc)
Раз вы говорите про заметную разницу на 300000 итераций давайте просто поставим лимит в 500000 и сравним утилиткой time:
#include <stdio.h>

int main()
{
  int i = 0;
  while(i != 500000) {
    printf("%i\n", i);
    i += 1;
  }
  return 0;
}

Против
i = 0
while i != 500000:
  print(i)
  i += 1

Смотрим, что вышло:
$time python3 test.py 
...
499999
real	0m6.472s
user	0m0.985s
sys	0m1.063s

6 с копейками секунд. Теперь сравним с решением на c, которое скомпилим по дефолту gcc test.c:
$time ./a.out 
...
499999
real	0m3.241s
user	0m0.234s
sys	0m0.749s

3 с копейками секунды.
Уже как-то расходится с вашими наблюдениями, так что вопрос про систему/компилятор/параметры сборки сишного кода актуален)
Не говоря уже о том, что (как сказали выше) замеры скорости по выводу в консоль - вообще плохая идея
Ответ написан
wisgest
@wisgest
Рабочий
Здесь узким местом является функция printf() и дело не только в выводе в консоль или куда-то ещё, но и в разборе строки форматов при каждом повторении и в преобразовании числа в строку.
Ответ написан
GavriKos
@GavriKos
Ну мало того что программы не идентичны, да и непонятно с какими опциями компилилось/запускалось, так еще и вывод в консоль...
Вывод может сам по себе тормозить, и его РЕАЛИЗАЦИЯ никак не отражает скорость ЯЗЫКА.
Ответ написан
si1n3rd
@si1n3rd
Я понимаю, что этот цикл не показатель скорости, но все же интересно почему так происходит.
Потому что реализацию Python не лохи пишут, как-то так. А вообще сравнивать скорость на таком примере глупо.
Ответ написан
vt4a2h
@vt4a2h
Senior software engineer (C++/Qt/boost)
Я понимаю, что этот цикл не показатель скорости, но все же интересно почему так происходит.

Если действительно интересно, то используйте профилировщики, чтобы понять, выполнение какой части программы занимает какое время. Потом поиграйте с флагами компиляции C и реализациями Пайтона. Далее, оцените влияние окружения.

Ах да, ну и ещё неплохо было бы разобраться, что конкретно вы пытаетесь проверить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
АКМЭ сервис Санкт-Петербург
от 120 000 ₽
Кликнет Санкт-Петербург
До 150 000 ₽
Технология Екатеринбург
от 100 000 до 200 000 ₽
04 апр. 2020, в 23:07
30000 руб./за проект
04 апр. 2020, в 23:05
100000 руб./за проект
04 апр. 2020, в 22:57
2000 руб./за проект