https://gall.dcinside.com/m/github/34144


어제 쓴 글인데


생각보다 관심을 많이 줘서 질답해드림



금융은 뭐하길래 속도가 중요하냐?

=> 1금융은 당연히 원장 신뢰성이 중요하기 때문에 성능보단 안정성이 우선임.

내가 말하는 건 자산운용, 트레이딩 등에서 쓰이는 애플리케이션들 ㅇㅇ

트레이딩 플랫폼, HFT, 퀀트 등등

이쪽 업계는 최근에 FPGA, ASIC 인력 엄청나게 흡수한 걸로 유명함



만드는 서비스 전체에서 그런 연산이 필요한 부분이 얼마나 있을까?

=> 나는 웹땔감 경력밖에 없어서, 적어도 내가 보고들은 한에서는 없음.

분명히 성능 개선이 필요한 부분이 생기긴 하는데 주로 DB 병목임.

DB 자체를 수직 분산하거나 쿼리 최적화하면 개선됨.

IT 서비스 성능 문제의 대다수는 DB병목, 인프라 문제로 종결된다.


그럼 머 써야함? C? 어셈블리?

=> 성능이 요구되는 분야는 아무리 최적화를 해도 끝도 없이 요구됨.

위에서 썼듯이 소프트웨어 최적화로 모자라서 fpga 끌고 오는 애들도 있음

그러나 그렇지 않은 분야는 (나의 경우처럼)

성능 최적화라는 단어가 아주 대단한 비용을 들일 필요가 없는 경우가 더 많음

결론: 회사에서 쓰는 거나 잘 쓰셈



이것(성능)때문에 리눅스 커널이 C 쓰는거 아님?

=> 반은 맞고 반은 틀림.

사실 뭐 운영체제를 C로 짜느냐 Java로 짜느냐 하는 거였으면 성능 상의 이유가 맞음.

그런데 C냐 C++이냐의 고민은 다른 문제지.

우선 중요한건 C++로 운영체제를 만든다손 치더라도

동적 할당이나 예외 매커니즘을 쓸 수 없는 것은 감안해야함

이 기능들 자체가 운영체제에 크게 의존하고 있기 때문에

운영체제를 C++로 만들면 직접 구현하는 수밖에 없음

그리고 그것 외에도 C++을 쓰면 생기는 문제가 ABI문제임

오버로딩이나 클래스 멤버함수 등을 쓰면 필연적으로 Name mangling이 발생함.

템플릿도 전이적으로 이 기능에 의존하니 마찬가지.

대부분의 현대 운영체제는 모놀리틱 커널 방식을 채택했는데

이 경우 커널 모듈이 운영체제 커널에 직접 링크되는 매커니즘이 필요함

알다시피 name mangling은 표준적인 동작이 아니기 때문에

링크 과정에 영향을 미치게끔 돼있음

자 그래서 결론적으로

STL 컨테이너 못쓰고, 예외 못쓰고, 템플릿 못쓰고, 오버로딩 못하고, 클래스 못쓰면

남는 게 뭐지?

그냥 C를 쓰게 되는 거야