node + Express 서버 성능 실험
1567 단어 서비스 측의 연구
app.get('/1',function(req, res) {
res.json({ title1: 'OK' });
});
app.get('/2', function(req, res) {
while(true) { /* CPU */ }
res.json({ title2: 'OK' });
});
먼저 접근/1, 서버에 문제가 없음을 증명 접근/2, 브라우저가 계속 빙빙 돌면서 접근/1, 나올 수 없음
실험 결론: node는 CPU 밀집형(예를 들어 죽은 순환을 쓰는 것)에 대해 무력한 것이 아니라 바로 죽는다...
조회 데이터 시간과 각종 자원 스케줄링 시간은 한 사용자가 기다리는 시간을 무시합니다. >= 앞에 있는 모든 작업의 CPU 연산 시간과 브라우저가 자원 응답을 기다리는 시간이 100ms를 초과할 수 없습니다. 여기 인터넷 IO는 50ms, 10000개의 요청을 소모할 수 있습니다. 각각의 연산 시간은 5us=5*10^-6s, 3.2GHz의 CPU를 사용합니다.3.2GHz=3.2*10^9Hz에도 16K개의 지령 주기가 있다. 설명을 하지 않아도 require 때 미리 컴파일한 적이 있다. 기계 코드가 아니기 때문에 어셈블리 차원의 최적화도 할 수 없을 것이다. 그리고 GC시간stop-the-world, 16K도 많지 않다.그러나 현실 상황을 고려하면 데이터를 찾는 시간이 더 길고 DB와 IO를 해야 한다. 연산 시간이 매우 적고 IO는 비동기적이다. 그러면 더 많은 요청을 받아들일 수 있다. 그러면 더 많은 메모리를 캐시 구역으로 분배하고 메모리를 많이 사용하고 페이지를 나누며 가상 메모리를 조정해야 할 수도 있다.