![]() |
|
||||||||
경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지 |
|
오래전에 글을 썼었던 기억이 나는데...
메모리를 1메가씩 먹는 것은 프로세스의 C++빌더와 델파이의 프로젝트 기본 설정에서 스택 크기를 1메가로 잡아놨기 때문입니다. 윈도우의 쓰레드는 생성 시점에서 기본적으로 스택을 할당하는데 프로세스 스택 크기와 같은 크기가 할당됩니다. 그래서 한 프로세스당 메모리 주소공간 한계 안에서 이 쓰레드 스택 크기만큼이 몇개나 들어가느냐로 계산해보면 물리적인 쓰레드 갯수 한계가 나오죠. 따라서 프로젝트 설정에서 스택 크기를 절반, 512k로 줄이면 쓰레드를 두배로 쓸 수 있습니다. 더 줄이면 그만큼 더 많이 만들 수 있죠. 제가 그 글을 처음 썼던 게 2000년대초였던 걸로 기억하는데, 그때는 이렇게 쓰레드의 스택 크기를 줄여서 쓰레드 수를 늘리더라도, 일정 수 이상으로 늘리면 늘어난 쓰레드의 수만큼 더 발생하는 쓰레드 스위칭 부하를 CPU가 감당을 못하는 한계에 부딛혔었죠. 즉 메모리를 막 줄인다고 해도 쓰레드를 일정 이상 쓸 수 없엇습니다. 그래서 어쩔 수 없이 꼭 필요하지 않은 경우에도 IOCP와 같은 더 복잡한 방법을 쓸 수밖에 없는 경우가 많았습니다. 그런데 지금은 멀티코어에 하이퍼쓰레딩까지 일반화되어서 그 한계가 훨씬 올라갔을 겁니다. 물론 실제 테스트를 해봐야겠지만, 아마 이전보다 적어도 5배에서 10배는 더 많은 쓰레드를 돌릴 수 있을 겁니다. 관련 글 리스트
|
Copyright © 1999-2015, borlandforum.com. All right reserved. |
64비트는 좀 더 많이 받을 수 있겠지만 역시 Context Switch 문제로
매우 성능 낮은 서버가 될뿐입니다.
수천명이 넘어가는 접속 환경에서는 쓰레드 방식으로는 안됩니다.
IOCP로 서버를 구성하면 만명까지도 가능합니다.