최근에 JAVA와 GO를 배우는 데 시간을 일부 투자하고 있는데 학습욕을 높여주는 포스팅이 있어 첨부합니다.
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다.
출처)
'Node, Nest, Deno > 🚀 Node.js (+ Express)' 카테고리의 다른 글
nginx(reverse-proxy), node에서 이미지 업로드 중 request entity too large 에러 (0) | 2020.12.08 |
---|---|
express 보안 우수 사례를 참고한 보안 강화 (0) | 2020.11.23 |
Row level Node : js의 동작 방식부터 libuv와 event loop까지 (2) | 2020.11.18 |
중앙 집중식 API 에러 핸들링 (탑레벨 fetching handler를 만들어라) (0) | 2020.09.17 |
pm2 이용 및 로그 기록 살피기 (0) | 2020.08.06 |