일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파이썬 동시성
- Adapter 패턴
- 하이브리드앱
- 플레이프레임워크
- Hyperledger fabric gossip protocol
- akka 강좌
- 엔터프라이즈 블록체인
- 파이썬 강좌
- 스위프트
- 스칼라 강좌
- 주키퍼
- Play2 로 웹 개발
- play 강좌
- 하이퍼레저 패브릭
- Play2
- Akka
- 안드로이드 웹뷰
- 파이썬 데이터분석
- 파이썬 머신러닝
- 이더리움
- 블록체인
- 파이썬
- Golang
- play2 강좌
- 그라파나
- 스칼라
- hyperledger fabric
- 스칼라 동시성
- Actor
- CORDA
- Today
- Total
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 웹싸이트에서 머라고 선전하건 간에, 노드는 쉽게 사용하기 어렵고, 확장하기 어렵고 응답성도 낮은 편인데 노드를 왜 써? 그럼 무엇을 쓰냐고? 내가 생각하는것은 아래와 같아~
Great | C++, Rust |
Pretty Good | Java, C#, Scala, Go |
Meh | Ruby, Python |
Garbage | Javascript, PHP |
음 C++ 빠(단순 성능빠)인거 같은데.. (자바스크립트,노드를 안좋아하는 것에 있어선 나와 비슷함) 성능만으로 선택하기엔 웹개발 세계는 매우 다양한 요소가 버무려져 있다는 거라.... 다만 분명한것은 대부분의 경우 비동기에 목맬 필요는 없다는 것 정도?? 얻는 것보다 잃는게 훨씬 더 크니깐~~
p.s 참고로 저런 벤치마킹은 그냥 벤치마킹으로 받아드리면 된다. 맹신하지 말것이며 본인 스스로의 환경에서 중요 컨텍스트에 맞게 벤치마킹을 직접 해보는게 정확하다.
'소프트웨어 사색 ' 카테고리의 다른 글
알고리즘 논란은 알고리즘으로 치유를.. (0) | 2017.06.19 |
---|---|
정적타입vs동적타입?? 단순한 언어가 최고!! (0) | 2017.06.07 |
[책이야기] Effective 시리즈 (0) | 2017.04.24 |
머신러닝, IoT, 빅데이터 등 학원결정에 어려움을 겪는 취준생들에게 (0) | 2017.04.13 |
[웹개발] SSE ( Server-Sent Events) 란 무엇인가 (3) | 2017.03.19 |