관리 메뉴

HAMA 블로그

동기 I/O 와 비동기 I/O 의 성능 차이 (부록: Node.js 는 좋을게 없다.) 본문

소프트웨어 사색

동기 I/O 와 비동기 I/O 의 성능 차이 (부록: Node.js 는 좋을게 없다.)

[하마] 이승현 (wowlsh93@gmail.com) 2017. 5. 12. 16:10

한주의 마지막이네요. 항상 건강 유념하시고~ 주말에는 푹 쉬시고 햇볕도 받으며 적절한 운동하시길 바랍니다.이번 글은 남의 글 2개를 읽고 정리 및 가벼운 코멘트 해보았습니다. 경어가 아닌점 양해해 주십시요. (_._) 



비동기와 동기 네트워킹 I/O 에 대한 성능차이 


위의 링크 글을 읽어보면 대략 이렇다.
@ 사람이 증가할때의 초당처리율(QPS), 빨리응답해주는능력(Latency), CPU 사용율은 큰 차이 없다.
@ 메모리 사용율은 큰차이로 비동기가 좋다.

CPU 사용량 차이 - 거의 없다.

메모리 사용량 차이 - 심하다.

응답 빨리 해주는 차이 (낮을수록 좋음) - 별로 없다

얼마나 많은 처리를 할 수 있나 (높을수록 좋음) - 큰 차이 없다. 


따라서 메모리를 적극적으로 사용해도 문제가 없다면 그냥 동기써라~ 훨씬 코드작성하기도 좋고 가독성도 좋다. 그러니깐 관리하기도 좋고 버그도 줄어들고 버그가 생겨도 더 명확하겠뭐 이런 내용이다. 

나도 비동기를 나름 잘 안다고 생각하는데도 불구하고 거의 대부분의 소켓통신 코드는 동기통신으로 짠다. 즉 SELECT나 IOCP 류를 사용하지 않는 다는 말~ 같은 사람이 아래와 같은 글도 썼다.


Node.js 를 사용 할 이유가 없어요.


Node 를 쓸 필요가 없단다. 다른 좋은것들이 많기 때문에~~뭐 주로 성능 측면( 근데 성능비교를 boost.Asio 랑 해놓아서..좀) 에서 그렇게 바라보는거 같다.그리고 비동기코드가 가지고 있는 비 직관성 때문에~~

내 생각도 비슷하지만 사람들이 많이 사용하는 이유로는 프런트엔드랑 동일한 언어로 개발하는것 , 코드길이가 비교적 짧고, 단일 CPU서도 비교적 좋은 성능을 보인다고 볼 수도 있겠다. 덕분에 사용자층이 두텁다. 공개 모듈도 많고~

빨리 응답해주는 차이 (낮을수록 좋다) 

얼마나 많은 처리를 할 수 있나 (높을수록 좋음) 

@ 참고로 위의 boost.Asio 는 C++ 라이브러리이며 ,  비동기도 사용하지 않은 결과이다.쩐다..

저 블로그 저자의 결론은 이렇다

Node.js 웹싸이트에서 머라고 선전하건 간에, 노드는 쉽게 사용하기 어렵고, 확장하기 어렵고 응답성도 낮은 편인데 노드를 왜 써? 그럼 무엇을 쓰냐고?  내가 생각하는것은 아래와 같아~  
GreatC++, Rust
Pretty GoodJava, C#, Scala, Go
MehRuby, Python
GarbageJavascript, PHP


음 C++ 빠(단순 성능빠)인거 같은데.. (자바스크립트,노드를 안좋아하는 것에 있어선 나와 비슷함) 성능만으로 선택하기엔 웹개발 세계는 매우 다양한 요소가 버무려져 있다는 거라.... 다만 분명한것은 대부분의 경우 비동기에 목맬 필요는 없다는 것 정도?? 얻는 것보다 잃는게 훨씬 더 크니깐~~

p.s  참고로 저런 벤치마킹은 그냥 벤치마킹으로 받아드리면 된다. 맹신하지 말것이며 본인 스스로의 환경에서 중요 컨텍스트에 맞게 벤치마킹을 직접 해보는게 정확하다.

Comments