프로그램 성능과 성격을 결정 짓는것은
메모리 매니지먼트 , I/O 이 두가지 이다.
검증된 것이 있으면 가져다 쓰자, 카피엔 페이스트가 아니라. 가지고 있던 걸 재활용하는 객체활용면에서 쓰자.
두가지 목표가 있다.
1.쓰레드 풀을 이해하자
2. 직접 구현하자.
동기화 기법도 공부할 수 있고, 다양한 면에서 공부할 가치가 있다.
커널오브젝트를 동반하는 것은 생성과 소멸이 빈번한다. 커널-유저모드 이동이 자주 일어나고. 많은 자원을 소비한다.
운영체제의 입장에서도 쓰레드는 부담이 될 수 있다.
ex)10개의 일을 처리할 때 시간적인 텀을 두고 실행 되어야 할 때
하나의 쓰레드가 일을 다 처리 할 수 있다면, 나머지 9개의 생성,소멸을 하지 않아도 된다.
또 2개의 일을 처리 해야할 때 풀에서 2개의 쓰레드를 꺼내서 처리하는데,
다시 3개의 일을 처리 해야할 때 풀에서 3개의 쓰레드 꺼내서 처리하면 다시 풀에 담는다.
적정한 수의 쓰레드를 미리 생성해서 풀에 저장해서 필요할 때마다 꺼내서 쓰자.
=> 성능(속도)향상에 이점이 있다.
쓰레드 풀 구현의 원리 (그 중 하나의 모델을 설명한다).
할당된 일의 정보가 쓰레드 정보(배열)가 들어가 있다.
쓰레드 생성시 이벤트 오브젝트도 같이 생성한다.
wait for singObject로 풀에 잠재운다. (이벤트처리)
[여기서 잠깐
커널은 운영체제를 이루는 핵심적인 부분을 의미하며 커널에서 관리하는 중요한 정보들을 담아둔 데이터 블록을 커널 오브젝트라고 한다.
새 프로세스가 생성될때마다 그 프로세스에 대한 정보를 담아둘 구조체가 생성되고 이 구조체들은 당연히 그 프로세스의 정보들로 초기화 되게 되는데 이것이 커널 오브젝트(Kernel Object)의 정체이다.]
일이 없더라도 미리 만들어 놓는데 몇개를 미리 만들어 놓느냐 인데.
만약 쓰레드 2개만으로도 처리하기 힘들면, Work Index 를 추가해서 쓰레드를 늘리자.
또 한가해지면 소멸해주는 쓰레드를 처리하자.
일의 성격에 따라 옵티마이저를 해야하는데. 하기 되게 힘들다.
0 comments:
Post a Comment