본문으로 바로가기

최근에 JAVA와 GO를 배우는 데 시간을 일부 투자하고 있는데 학습욕을 높여주는 포스팅이 있어 첨부합니다.

 

Comparing The Performance Of Synchronous Versus Asynchronous Network IO

web.archive.org/web/20170606144522/bysin.net/evidence-based-research/2017/03/04/comparing-the-performance-of-synchronous-versus-asynchronous-network-io/

 

@ 사람이 증가할때의 초당처리율(QPS), 빨리응답해주는능력(Latency), CPU 사용율은 큰 차이 없다.
@ 메모리 사용율은 큰차이로 비동기가 좋다.

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

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

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

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

 

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

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

 

There's no good reason to use Nodejs

web.archive.org/web/20170614151153/bysin.net:80/2017/05/07/no-good-reason-to-use-nodejs/?

 

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

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

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

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

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

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

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

 

 

벤치마킹을 맹신하지도 말아야할 것이며, 구현 난이도에 있어서도 차이가 나는 건 사실이나 이러한 작업이 프로젝트를 반드시 Node 기반으로 해야할 이유가 없다는 것을 보여주는 것도 사실이다.

 

성능 빠로 C++, Rust로 모든 것을 해결하면 좋겠으나 이는 쉽지 않은 일이고, 큰 기업에서도 여전히 Node를 사용하고 있다. 일단 부족한 점을 알아내고 이것을 보완하기 위해 다른 언어를 배워나가자! 우선은 java랑 Go다.

 


출처)

hamait.tistory.com/839

 

 

darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체