아하 로고
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
용감한동고비40
용감한동고비4020.06.09

파이썬은 왜 씨보다 느린가요?

왜죠?

55글자 더 채워주세요.
답변의 개수5개의 답변이 있어요!
  • 컴퓨터는 0과 1로 대화를 합니다.

    우리가 프로그래밍 코드를 작성하면

    컴퓨터가 이를 이해할 수 있도록

    코드를 0과 1로 번역해주는 작업이 필요합니다.

    이 번역 과정을 compilation 또는 interpretation이라고 합니다.

    interpretation의 경우 코드를 한줄 한줄 실시간 통역을 하고

    compilation은 코드 전체를 읽고 한번에 통역을 합니다.

    파이썬은 0과 1로 통역하는 중간 프로세스가 필요해서 시간이 지연되지만

    C언어 같은 경우는 중간 통역자없이 이미 Complied 되어있기 때문에 빠른 처리가 가능합니다.


  • C는 실행하기 전에, 코드를 기계에서 바로 실행 가능한 기계어로 만드는 컴파일 단계를 거칩니다.
    파이썬은 인터프리터가 코드를 읽어서 실행합니다. 일단 인터프리터를 거쳐서 느립니다.

    C는 AOT 컴파일 (한 번에 전체를 컴파일) 단계에서 추가적으로 최적화를 하기도 합니다.
    파이썬 인터프리터의 JIT 컴파일(그때그때 컴파일)은 실행 속도에 영향을 주기 때문에 최적화에 제한적입니다.


  • 여러가지 이유가 있습니다. 그 중에 가장 큰 부분은 바로 컴파일된 오브젝트 코드에 차이가 있습니다.

    c언어는 컴파일 할 경우 기계어(cpu가 곧바로 읽어 해석할 수 있는 언어)로 출력합니다. 파이썬은 조금 다르게 바이트코드라는 것을 출력합니다. 이것은 cpu가 곧바로 읽을 수 없고 파이썬 인터프리터라는 프로그램을 통해서 기계어로 다시 변환 후 cpu가 처리를 할 수 있습니다. 즉 파이썬은 인터프리터라는 한단계를 더 거치기 때문에 실행속도가 느린 편입니다.

    파이썬이 곧바로 기계어로 변환하지 않고 바이트코드로 변환하는 이유를 이해하시면 성능이 느린데도 불구하고 c언어에 비해 파이썬이 인기 있는 이유를 아실 수 있습니다.

    우선 c언어의 대표적인 문제점은 크게 두 가지를 꼽아볼 수 있습니다.

    첫번째는 메모리 관리입니다. c언어를 공부해보시면 아시겠지만 포인터, 동적메모리 등 메모리에 대한 이해가 필요하고 잘 관리를 해야 프로그램에 오류가 발생하지 않습니다. 인터프리터는 개발자가 포인터나 메모리, 그외의 하드웨어에 대해 아주 간단한 인터페이스만 제공하여 런타임을 예측하여 개발자가 신경써야할 부분을 대신처리해줍니다. 바이트코드가 이 간단한 인터페이스라고 생각하시면 됩니다. 이 바이트코드는 사람이 이해하기 약간 복잡합니다. 그래서 사람은 파이썬이라는 사람이 이해하기 쉬운 언어로 개발을 하고 컴파일러를 통해 바이트코드를 변환합니다.

    두분째는 다양한 실행환경입니다. c언어는 컴파일할 때 컴파일되는 운영체제와 cpu에 맞게 최적의 기계어로 변환을 해줍니다. 다른 관점에서 보자면 컴파일된 시스템의 운영체제와 cpu가 다를 경우 실행이 되지 않을 수 있습니다. 다행스럽게도 일반적인 데스크탑용 cpu는 대부분 호환이 가능하지만 안타깝게도 운영체제가 다를 경우 실행이 되지 않습니다. 즉, 운영체제마다 컴파일을 새로 해야 하고 때에 따라서는 코드를 수정해야 할 경우도 있습니다. 파이썬 인터프리터는 cpu와 운영체제에 맞게 이미 빌드되어 있고, 모든 인터프리터는 동일한 바이트코드를 동일하게 처리합니다. 그렇기 때문에 개발자는 운영체제 또는 cpu에 대해 고민할 필요가 거의 없습니다.


  • 안녕하세요

    파이썬은 기본적으로 인터프리터에 의해 한줄 한줄 바이트 코드로 변환(컴파일)되어 실행 되기 때문에,

    전체 코드에 대해 한번만 실행되는 C에 비해 느릴 수 밖에 없습니다.

    다만, 어떤 연산을 하냐에 따라 100배 느릴수도, 10배 느릴수도 있어서

    '얼마나' 느리냐는 것은 실행 해봐야 안다 라고 답변 드릴수 있겠습니다.


  • 인터프리터 언어와 컴파일 언어의 차이 입니다.

    프로그래머가 작성한 코드는 기계어로 변환된 다음 명령어가 실행되는데,

    인터프리터 언어는 코드를 한줄 한줄 변환하여 바로 명령어를 실행하는 언어를 말하며 Python, R, Ruby 등이 대표적입니다.

    반면 컴파일 언어는 전체 코드를 기계어로 변환(빌드)한 다음에 명령어를 실행합니다.

    대표적인 언어로 C, Java 등이 있습니다.

    즉, 런타임 환경에서는 한줄 한줄 기계어로 변환 후 실행하는 인터프리터 언어( Python )보다는

    이미 변환된 기계어를 실행만 하는 컴파일 언어( C )가 일반적으로 더 빠르다고 할 수 있습니다.