필자가 작성한 테스트에서 목표는 파서를 만드는 것이다. 그래서 저는 파일에서 모든 메시지를 읽는 개념 증명을 만들었습니다. 그리고 모든 것을 메모리로 밀어 넣은 후에 각 메시지를 구문 분석하기 위해 하나의 프로세스를 생성합니다. 그 때까지는 모든 것이 잘되고 몇 가지 좋은 결과가 있습니다. 그러나 나는 erlang VM이 내 테스트를 수행 할 때 내 프로세서의 약 25 %를 사용하고있는 사실, 모든 쿼드 코어를 사용하는 모든 프로세서 전원을 사용하지 않고 있음을 알 수있었습니다. 나는 4 개의 쓰레드를 사용하는 C++을 사용하여 카운터 테스트를 만들었고 명백하게 100 %를 사용하여보다 나은 결과를 얻었습니다. (나는 같은 큐 모델 erlang이 사용하는 것을 존중했습니다).얼랑 (Erlang) 프로세스의 성능 최적화
그래서 내 얼랑 테스트를 "느리게"할 수 있는지 궁금합니다. 메시지 당 하나의 프로세스가 생성되므로 직렬화 문제가 아니라는 것을 알고 있습니다. 내가 생각한 한가지는 아마도 내 메시지가 너무 작아서 (각 약 10k) 프로세스의 많은 부분을 만드는 것이 훌륭한 성능을 달성하는 데 도움이되지 않는다는 것입니다. 시험에 대한
몇 가지 사실 :
106K 메시지 (25 % 프로세서 전원 사용) 얼랑에 - 204 밀리 내 C에 ++ 테스트 (사용 100 % 프로세서 전원) - 80 밀리
예
차이가 그렇게 크지는 않지만, 더 많은 전력을 사용할 수 있다면 확실하게 개선의 여지가 더 많습니다. 맞습니까?아, 필자는 몇 가지 기능을 수행 했으므로 최적화를위한 또 다른 방법을 찾을 수 없었습니다. 대부분 함수 호출이 없으며 대부분이 개체 변환을위한 문자열입니다.
업데이트 :
Woooow! 하산시 에드 (Hassan Syed) 아이디어에 따르면, 저는 C++에서 80에 비해 35 밀리 초를 달성했습니다! 이것은 대단하다!
즉각적인 생각은 당신이 메시지를 구문 분석에 비해 파일을 검색에 들어가는 시간이 얼마나 알고 있는지 여부이다. 스캐닝은 본질적으로 순차적이므로 산란 프로세스의 병렬 효과가 손실 될 수 있습니다. 이것은 코어가 사용되지 않는 이유를 설명 할 수 있습니다. – rvirding