프로그래밍을 하다가 한가지 의문스러운 점이 있어서 고수들의 조언을 구합니다.
제가 만든 프로그램에서 쓰레드의 생성 개수를 제한하지 않아서 내부적으로 2000개
이상의 쓰레드도 동시 수행하게끔 되어 있는데, 쓰레드의 실행개수가 1900개 이상
되니까, 알 수 없는 오류가 발생했다면서, 에러 창이 없어지질 않더군요.
추측컨데, 쓰레드가 1900개 이상이 동시에 생성되지 못하고, 중간에 생성할 때
오류가 발생한 것이 아닌가 추측해 봅니다만, 생성하는 부분에도 오류가 발생하면
발생한 오류를 출력하도록 try... except 처리를 했음에도, 알 수 없는 오류가
나는 것이 조금 이상합니다.
각 쓰레드에서 크게 하는 일도 없고, 메모리를 과도하게 사용하는 일도 없고,
단순 계산만 하고 그 값을 다시 메인에 알려주는 정말 단순한 구조로 되어 있는데,
쓰레드의 개수가 늘어나면, 알 수 없는 오류로 종료가 되어 막막한 지경입니다.
환경은 윈2000 프로, 램 392M에 하드 넉넉합니다.
추측이 되는 오류의 원인이라도 고수들의 가르침을 부탁드립니다.
ps. 윈도우에서 한 프로세스당 동시 생성할 수 있는 쓰레드의 개수 제한이 있나요?
쓰레드가 생성될 때, 각 쓰레드마다 스택이 할당되게 되어 있는데, 1900이상을 동시에
생성하게 되면, 2G의 주소공간 한계로 인해서 스택 할당에 실패하여 더이상의
쓰레드 생성이 안되는 것이었습니다. TThread 클래스를 통해서 쓰레드를 생성하면
1M의 스택을 할당받게 되는데, 쓰레드당 1M 씩이기 때문에 약 2000개 정도의 쓰레드를
생성할 수 있겠죠.
2000개 이상의 쓰레드를 생성하기 위해서는 쓰레드가 생성될 때, 할당하는 스택의
크기를 조정하면 되는데, 이는 CreateThread API를 이용해서 생성할 때, 스택의
크기를 조정할 수 있습니다.
그럼, 참고가 되셨길~...
한원희 wrote:
> 프로그래밍을 하다가 한가지 의문스러운 점이 있어서 고수들의 조언을 구합니다.
>
> 제가 만든 프로그램에서 쓰레드의 생성 개수를 제한하지 않아서 내부적으로 2000개
> 이상의 쓰레드도 동시 수행하게끔 되어 있는데, 쓰레드의 실행개수가 1900개 이상
> 되니까, 알 수 없는 오류가 발생했다면서, 에러 창이 없어지질 않더군요.
>
> 추측컨데, 쓰레드가 1900개 이상이 동시에 생성되지 못하고, 중간에 생성할 때
> 오류가 발생한 것이 아닌가 추측해 봅니다만, 생성하는 부분에도 오류가 발생하면
> 발생한 오류를 출력하도록 try... except 처리를 했음에도, 알 수 없는 오류가
> 나는 것이 조금 이상합니다.
>
> 각 쓰레드에서 크게 하는 일도 없고, 메모리를 과도하게 사용하는 일도 없고,
> 단순 계산만 하고 그 값을 다시 메인에 알려주는 정말 단순한 구조로 되어 있는데,
> 쓰레드의 개수가 늘어나면, 알 수 없는 오류로 종료가 되어 막막한 지경입니다.
>
> 환경은 윈2000 프로, 램 392M에 하드 넉넉합니다.
> 추측이 되는 오류의 원인이라도 고수들의 가르침을 부탁드립니다.
>
> ps. 윈도우에서 한 프로세스당 동시 생성할 수 있는 쓰레드의 개수 제한이 있나요?