C, asm이 계속 사용되는 이유?

awdxawdx101의 이미지

갑자기 궁금해진게 있습니다.
python을 처음 시작할 때 장/단점을 말하면서 많이 들은겁니다.

python의 단점이 실행 속도가 느리다는 점인데, 앞으로 기술 발전으로 인해 H/W 성능이 좋아져서 결국 C와의 속도차가 점점 줄어든다고 합니다.

난이도가 있음에도 불구하고 C, asm을 사용하는 이유가 포인터와 빠른 속도라고 생각하고 있습니다.

그런데 난이도가 낮은 python이 속도면에서 따라잡는다면, C&asm을 오로지 포인터 사용을 위해 남아있게 되는건가요?

다른 이유가 있나요?

Necromancer의 이미지

python 모듈 중에 c 없으면 못만드는 모듈 많이 있을껄요. 모듈 없는 만큼 python의 활용도는 추락하고요. 신형 device 추가되고, 이를 지원하는 신형 api 나오면 c로는 다 대응되지만, python은 모듈 내올때까지는 못쓴다고 보시면 됩니다. asm은 c가 못다루는 더 깊숙한 하드웨어까지 건드릴 수가 있습니다(물론 그만큼 코딩량 폭증합니다. asm은 아무리 적게 잡아도 c의 10배 이상의 노력이 들어가기 때문에 시간이 돈인 산업현장에서는 될 수 있는대로 안쓸려고 하죠).

Written By the Black Knight of Destruction

awdxawdx101의 이미지

신형 device를 지원하는 API를 만드는데 C&asm이 사용된다는 말씀인가요?

"신형 api가 c로 대응된다" 이게 무슨 뜻인지 잘 모르겠습니다..

jick의 이미지

하드웨어 성능이 좋아지면 파이썬 코드만 빨라지나요, C 코드는 더 빨라집니다.

그러면 "기존에 C로만 할 수 있던 일"을 Python으로도 할 수 있게 되지만, "기존에는 절대 불가능했던 일"은 이제 "C로만 할 수 있는 일"이 되는 거죠.

awdxawdx101의 이미지

"H/W 성능이 좋아지면서 이전엔 불가능했던 일들이 이젠 C로만 할 수 있는 일"에는 뭐가 있을까요?

아직 많이 부족해서 뭐가 있을지 상상이 안갑니다 ㅠ.ㅠ

jick의 이미지

뭐 그렇게 어렵게 생각할 필요 없습니다.

"Python으로 할 수 있는 계산인데 Python으로 낼 수 있는 속도보다 100배 빨라야 함" 뭐 이런 거면 됩니다.

awdxawdx101의 이미지

답변 감사합니다. 그런데 아직 궁금한게..

"기존에 절대 불가능했던일"에는 뭐가있을까요?

속도때문에 불가능하다고 여겨지는게 예를 들어 뭐가있는지 궁금합니다.
지금 이론상 가능하지만, 실제 실행 속도가 느려서 구현못하는 기술같은게 있나요?

jick의 이미지

역시 뭐 어렵게 생각할 필요 없고요, 요즘 나오는 게임 그래픽들 다 20년 전에는 불가능하거나, 하드웨어에 대학연구소 수준으로 돈을 쳐발라야 할 수 있던 작업이죠.

(여기서 "불가능"이라는 건 진짜로 "아무리 오래 기다려도 계산불가능"이 아니라 "계산을 하라면 할 수는 있겠지만 화면 한 장 찍는데 몇 시간 걸리므로 실제로 써먹을 수 없음" 이런 의미입니다.)

awdxawdx101의 이미지

아.. 그런 불가능이였군요...

이제 차츰 이해가 되기 시작하네요. 감사합니다

swish95의 이미지

사용목적이 다른걸 비교 하려 하시네요..
포크레인이 경량화 되고 싸진다고 삽이 없어질 일은 없는것처럼 각각 사용용도와 목적이 있는겁니다.

------------------------------------------------------------
ProgrammingHolic

awdxawdx101의 이미지

C&asm은 속도가 빠르고 포인터 사용이 가능해서 low level 개발, Python은 high level 개발에 사용되는걸로 알고있습니다.

그런데 말입니다.

예를 들어 Python 코드의 실행 속도가 빨라지고, 포인터 사용이 가능한 모듈( 예를 들어 C로 만든 모듈이 있다고 합시다 )이 나온다면, low level 개발할 때 개발 속도가 빠른 Python을 두고 굳이 C&asm을 사용할 일이 있을까요?

아니면 low level 개발 말고 다른 목적으로 C&asm이 사용되는 곳이 있나요?
("C로 만든 모듈" 이라던가...)

swish95의 이미지

무의미한 문제라고 말씀드린게 그런 뜻입니다.
삽으로 하면 꼼꼼하고 세세하게 작업할수 있고 디테일한 부분까지 사용자화 - 커스터 마이징 - 이 가능합니다.
래핑된 모듈이 그러한 기능을 제공한다 해도 제목과 같은 전제를 벗어날수 없는 이유죠

님은 계속

"개발 속도 빠른 고수준 언어로 개발하면 되는데 어렵고 힘든 저수준 레벨로 개발 할 필요가 있는냐?"

라고 하시는데 개발 속도가 느려도 그걸 상쇄할만한 속도 이슈가 있으면 그걸 써야죠..^^

사족을 달자면 언어는 도구 일뿐이니까 어떤 언어를 사용할지는 상황에 따라 다를 수밖에 없습니다.
어떤 이유로 python 같은 고수준 언어를 지원하지 않는다면 asm 을 쓸수 밖에 없는거니까요

------------------------------------------------------------
ProgrammingHolic

awdxawdx101의 이미지

저도 실행 속도면에서는 C가 우위에 있다고 생각합니다만,

파이썬을 공부하는 제 주변 사람들 중 몇몇이 속도면에서 C랑 비교했을 때, 기술이 발전할수록 차이가 좁혀진다고 장담하길래 왜 그런 소리가 나오는지 궁금했었습니다.

계속 찾아보다가 아래 링크를 발견했는데 2015년에 쓴 기사지만 이런말들이 나옵니다.

==========================================================================================
커틴은 “파이썬은 인터프리트 언어라서 종종 컴파일 언어보다도 느린 경우가 있다”고 말한다. “하지만 언어를 실생시간으로부터 분리하는 문제로 돌아간다. 파이파이(PyPy)로 실행된 파이썬 코드의 특정 벤치마크는 이와 동일한 수준의 C코드나 기타 코드보다 더 빠르게 실행된다”고 덧붙였다.

카보넬은 “실행 속도가 느리다는 것이 파이썬의 단점이 될 수 있다,”고 말하는데, 하지만 많은 파이썬 패키지들은 지난 수년간 최적화를 거쳤고 C 속도로 실행된다고 설명한다.
==========================================================================================

물론 링크에서는 속도가 느리다고 말하는 사람도 있지만, 이해가 되지않는게 C와 파이썬의 속도를 비교할 때 객관적으로 평가할순 없는건가요?
왜 사람마다 다르게 말을하는지 모르겠습니다.

원문보기:
http://www.ciokorea.com/news/24242#csidx2826c8860fecae8900fa6cae57c26e9

김정균의 이미지

실행 시간이라는 것이 매우 주관적입니다. 즉 어떤 분야에서는 0.1 초는 차이가 안나는 거나 동일하지만 또 다른 곳에서는 0.1 초의 차이는 하늘과 땅 사이의 간격일 수도 있습니다. 그러므로 interpreter 를 통해서 실행되는 python은 (아무리 opcode 로 미리 pre compile 시켜 놓는다고 해도) compile 된 binary 와 간격이 발생할 수 밖에 없습니다.

즉, HW 의 발달로 많은 분야에서 interpreter language 들이 compile binary 대신에 사용할 수 있는 범위가 점점 넓어지고 있는 것이지, 완벽하게 대체를 할 수는 없는 것입니다.

간격에 대해서는 다음의 예가 아주 좋은 것 같습니다.

지문 인증은 1%의 오류가 발생할 수 있다고 합니다. 즉, 100개 중에 1개가 오인식이 될 수 있다는 얘기인데요. (%에 대해서는 저도 정확하게 찾아본 바 없습니다. 다만 흐름으로 봐 주시면 되겠습니다.) 이게 막는 입장에서는 99%즉 거의 다 막는 것이지만, 뚫는 입장에서는 1%나 구멍이 있다고 봅니다. 뚫는 입장에서는 0.01% 만 되어도 시도를 하는 입장에서 1%는 엄청난 큰 구멍이라는 것이죠. 즉 위에서 말한 0.1 초의 갭은 이런 의미로 보시면 될 것 같습니다.

awdxawdx101의 이미지

오오.. 비유가 너무 좋은거같습니다. 이해가 잘되네요

감사합니다

swish95의 이미지

이 내용자체가 특수한 경우에 해당한다는 이야기입니다.
"저수준 레벨의 언어로 대충 짠 코드보다는 고수준의 언어로 잘 짜면 빠를수 있다" 라는 의미이지 모든 상황에 부합하지는 않는다는 겁니다.

물론 개발속도고 돈이고 그에 따른 품질도 돈이기 때문에 주변에 C 할줄 아는 사람 없고 Python 만 할줄 아는데 .. 굳...이 C 로 하지는 않습니다.
하지만 C 보다 느리지 않다고 벤치마킹한 자료를 들이밀지 않으면 믿지 않습니다..

그리고 저수준의 언어를 잘 다루면 python 아니라 python 할아버지가 와도 퍼포먼스 못 따라갑니다.
단.. 비슷하게는 갈수 있겠죠 ^^

참고로 이런 논쟁은 고수준 언어 커뮤니티 가면 어디던 볼수 있습니다.
PHP 를 스크립트로 짤수 있게 되니까 서버 프로그램을 PHP 로 짜는 사람도 있습니다.
이 분들에게는 PHP 로 하면 되는데 굳이 python 같은 어려운 언어 쓰느냐.. 할겁니다. ^^

------------------------------------------------------------
ProgrammingHolic

emptynote의 이미지

아직도 속도가 경쟁력인 곳이 있기때문에 c 와 어셈이 필요합니다.

게임 서버는 아직도 c 나 c++ 입니다.

서버에 대한 요구 조건중 충분히 빠른 처리 시간이 잇는데

충분히 빠른 처리 시간은 각 분야마다 천차 만별입니다.

웹에서는 이 시간이 대략 5초입니다.

반면 게임 서버에서는 렉이라는것을 느끼지 말아야 하는 시간으로 밀리세컨드 혹은 나노세컨드 단위입니다.

그리고 하드웨어 발전했다고 예를 들면 자바 언어 속도가 c 언어 속도 잡는것은 아니구요.

c 언어로만 충분히 빠른 처리 시간안에 처리 가능한것이 하드웨어 발전으로

자바 언어에서도 만족시키게 된다는 말입니다.

자바가 웹에 강세인것은 "충분히 빠른 처리 시간" 이 대략 5초인것이 가장 크게 작용한것입니다.

joone의 이미지

nodejs로 만든 기능을 성능이 안나와서 C++로 다른 만든 적 있습니다. 서버에서 초당 더 많은 request를 처리하는 것이 다 돈이라서, 특히 cloud을 쓰면.. 결국 C/C++ 더 하면 어셈으로 다시 개발하기도 합니다.

ymir의 이미지

언어마다 그 용도와 목적이 다릅니다.
서로 다른 목적을 가진 언어를, 단순히 실행 속도 하나로만 비교하면 서로 불공평한 일이 되겠죠.
단순히 성능만 아니라, 추가로 개발/유지보수 비용/시간, 인력 수급 및 숙련도, 제품의 신뢰도/완성도 등등..
다양한 고려사항들이 포함되어 사용될 언어/플랫폼이 결정됩니다.
언어들이 가진 특성을 이해하고, 어떤 환경과 조건에서 어떤 언어가 더 적합한지 선택할 수 있으면 되는 겁니다.

아무리 python 이 빠르다 하더라도, c/asm 이 자리잡고 있는 영역을 모두 대치할 수 있는 것도 아니고..
그래야 할 이유도 없습니다.

예를 들어 정말로 python 이 그만큼 빨라졌다 한들, linux kernel 이나 OS 를 대체할 수 있을지..
또는 그 과정의 모든 혼란과 비용을 넘어설 만한 메리트가 있을지..
또는 그게 꼭 python 이어야만 할지.. 알 수 없는거죠.

오래된 언어들이 계속 쓰이는 이유는, 그걸 쓰는 사람들이 있어서이고..
그 사람들이 자신들의 일에서 그걸 필요로 하기 때문입니다.
그리고 그 사람들이 자신들의 일에서 그 언어가 적합하다고 설명할 수 있기 때문입니다.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』