윈도우의 프로세스와 스레드 (13)
윈도우의 프로세스와 스레드 (13)
파이버
파이버는 스레드보다 더 작은 단위의 일을 의미합니다. 보통 SQL 서버를 운영하면서 파이버라는 단어를 처음볼수있습니다.
멀티스레딩 프로그램에서 동시에 엄청난 다중 작업이 들어왔을경우 시스템은 컨텍스트 전환 오버헤드가 걸리게 됩니다.
특히 다중 프로세서를 운영하는 중앙 데이터 서버와 같은 경우는 초당 수천건의 컨텍스트 전환과 100%에 육박하는 CPU 점유율을
보이는경우가 다반사입니다. 이러한 경우에 특화된 해결책이 파이버입니다
스레드가 실을 의미하고 있기때문에 실의 원료가 되는 섬유(fiber) 로 이름을 붙은걸로 생각됩니다.
파이버는 스레드와 달리 컨텍스트 전환을 시스템스케줄에 따르지않고 수동으로 해주어야합니다.
따라서 컨텍스트 전환에 따른 오버헤드가 발생하지않습니다.
그런데 컨텍스트 전환을 수동으로 하는것은 결국 멀티스레딩의 강점을 상당부분 잃어버리는것을 의미합니다.
따라서 파이버로 모든 코드를 작성하는 경우는 존재할수없습니다.
이는 프로세스 단위에서 항상 싱글 스레딩을 영위하고 있는 결과를 낳게됩니다.
만일 파이버가 스레드에서 파생될수있다면 어떤 의미를 지닐까요 ?
이는 컨텍스트 전환은 스레드 단위에서 이루어지고 업무는 파이버 단위에서 이뤄지는것을 의미합니다.
가령 100개의 스레드를 사용하는 응용프로그램이 존재한다고할때 스레드 100개를 영위하기위해서는 100가지의 서로 다른 상태를 저장하고 이들사이에서
전환이 이루어져야하지만 50개의 스레드와 2개의 파이버를 사용한다면 컨텍스트 전환에 따르는 오버헤드를 다소 줄일수있습니다.
시스템에서 이루어지는 컨텍스트 전환은 스레드 단위이기때문에 각각의 스레드는 어차피 할 컨텍스트 전환이 반으로 줄어드는 셈이됩니다.
그리고 파이버 상호간에 이루어지는 컨텍스트 전환은 그 오버헤드도 작고 수동으로 이루어 지므로 많은 장점이 존재합니다.
그러나 스레드 대신 파이버를 사용하는것은 성능 계산을 정확하게 해야한다는 단점이 존재합니다
따라서 대용량 멀티스레드 프로그램에서 주로 사용되며, 현재까지 가장 효과적으로 사용되고있는것은 멀티프로세스가 장착된 MS-SQL 데이터베이스 서버입니다.
파이버를 사용할경우 가장큰 약점은 자기자신의 프로세스가 전체 CPU 를 대부분 장악하는 상황이 아니라면 컨텍스트 스위칭에서 후순위로 밀려버리는 상황이
벌어질수있다는것입니다. 즉 스레드 숫자가 적기때문에 할당에 따른 상대적 차별을 당할수있습니다.
따라서 SQL Server 의경우 CPU 점유량이 많지않다면 파이버로 스레딩을 대신하는것은 아무런 득이 되지못할가능성이 높습니다.
작업객체
작업객체는 프로세스와 스레드를 다루는 객체 단위중에 가장 큰것으로 일련의 프로세스를 하나의 작업으로 묶어놓은것입니다.
Reference
- https://karfn84.tistory.com/entry/%ED%8E%8C%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-%EC%9C%88%EB%8F%84%EC%9A%B0%EC%9D%98-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C