다양한 언어로 CPU 코어를 다 사용해 봅니다.
경위
동료 내에서 "코어를 다 사용하는 프로그램을 가득 써 보자"라는 화제가 나왔기 때문에 김으로 써 보았습니다. 모처럼이므로 시간이 없기 때문에 일에서 자주 사용하고 있다
Ruby
Elixir
Go
의 3 언어로 시험해 보았습니다.마사카리 방지 대응
- 실용성, 최적화 등은 일절 생각하지 않고 단지 코어를 다 사용하는 것에 포커스.
- 그 때문에 처리 속도나 syntax는 무시
- 표준 라이브러리만 사용
- 30분만에 쓸 수 있는 수준의 제약으로 구타를 한다
실행 환경
OS가 오래된 츳코미는 안됩니다.
테스트 시나리오
1
의 처리를 병렬로 실행 htop 에서 CPU 사용 보기
1.Ruby
비교적 멀티 코어 환경에서 성능을 끌어내기 어렵다고 하는 경향이 있는 Ruby입니다만 프로세스 포크를 하면 간단하게 사용할 수 있습니다.
그러나 이 구현에서는 process 를 fork 해 너무 OS 의 거동이 이상하게 되기 때문에 실제로 멀티 코어 환경에서 처리를 움직이기 위해서는 열심히 프로그램을 쓸 필요가 있을 것입니다.
(좋은 example이 있으면 알려주세요)
gist:
htps : // 기 st. 기주 b. 코 m / 오타 rh / 8 t fb2 굳이 778 에 4135d4f195fb7 ba f42d7
result:
OS가 굳어지기 때문에 htop의 캡쳐를 취하는 작업이 제일 고생했습니다
비명을 지르는 OS
2.Elixir
멀티 코어 환경에서 강하다고 불리는 Elixir/Erlang이지만, 어쩌면 어떨까요?
GenServer 를 사용하는 것이 보통일까 생각합니다만 코어를 다 사용하는 것 밖에 생각하지 않습니다. 예.
gist:
h tps://의st.魏 튜 b. 소 m/오타~rh/254b84㎝ df666947 그림 92405 아베 예 FC2DC1
result:
과연 간단하게 다 사용하네요. 구현은 가장 간단했습니다.
3.Golang
이쪽도 멀티 코어 환경하에 힘들다고 하는 Golang입니다. 빠진 얼굴이 멋집니다. 그렇다면 어떨까요?
gist:
h tps://의st.魏 Tub. 소 m/오타~rh/0982네 468b3화 00아9아0베 98b24C4b4아7
지금까지의 시나리오 구현에서는 go가 너무 빠르 CPU를 사용할 수 없습니다.
라는 것으로 급거 처리 오더 수를 늘려 다 사용할 수 있었습니다. go 일찍!
총론
최적화 등 전혀 생각하지 않고 쓰고 있었습니다만 「언어 사양 레벨로 멀티 코어를 의식하고 있는지, 그렇지 않은가」로 쓰기 쉬움은 물론, 동작의 안정성에도 상당히 차이가 났습니다.
본격적으로 병렬 처리를 쓰려고 하면 샘플의 빌어 먹을 코드에서는 대응할 수 없기 때문에 보다 복잡한 처리가 필요하게 될 것입니다.
다음은 좀 더 실용적인 처리를 써 보려고 했습니다.
덤
90%정도의 일에 있어서(독단과 편견) 퍼포먼스는, 특히 의식하지 않아도 프레임워크나, 미들웨어가 대체로 잘 해 줍니다. 그리고 문제가 되는 것은 I/O가 얽히는 부분이며 코어를 다 사용해 최적화하자! 같은 상황은 적을까라고 생각합니다.
만일이라면 지폐로 때리면 좋네요!
결국 「좋아하는 언어로 우선 써, 필요하게 되면 자랑으로 하는 언어로 재작성하면 좋다」라고 생각하고 있습니다. 왜냐하면, 싫어하는 언어를 써도 지루하지 않을 것입니다 w
Let's enjoy programing!!!!!
Reference
이 문제에 관하여(다양한 언어로 CPU 코어를 다 사용해 봅니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Issue_Ojisan/items/77a9de68798f768a2542텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)