스레드 풀은 그냥 윈도우가 스레드 작업 관리를 위해 제공해 주는 기능 같은 거고... IOCP는 비동기적 작업을 위해 윈도우가 제공해 주는 인터페이스임. IOCP는 IOCP 인터페이스를 지원하는 API 쓸 때나 필요하지 그걸 직접 쓸 일은 거의 없음. 소켓 프로그래밍이나 파일 입출력, 일부 쉘 관련 함수 같은 거 쓸 때나 필요. 스레드 풀은 무슨 API가 있다는 것만 알고 써본 적은 없음. 그만큼 필요성이 낮음.
ㅅㅅㅅ(125.128)2015-05-10 01:48
스레드 풀 API가 비스타 때 처음 나온 거라 그런 것도 있음. 스레드 풀을 대체할 방법은 얼마든지 있음.
ㅅㅅㅅ(125.128)2015-05-10 01:49
ㄴ그럼 스레드 풀 대체할 방법이 어떤것들이 있는지 알려줘
ㅁㄴㅇㄹ(58.140)2015-05-10 01:52
아니 스레드 풀이라는 개념을 알면 굳이 MS가 제공해 주는 스레드 풀 API를 안 써도 스레드 생성 API만 알면 스레드 미리 여러 개 만들어 놓고 작업 큐 만들고 작업 있으면 꺼내서 처리해 주는 걸 직접 짜면 되잖아. MS는 이런 걸 API 형태로 편하게 제공해 주고 있는 거고.
ㅅㅅㅅ(125.128)2015-05-10 01:55
ㄴ 나는 뭐 또 특별한, 스레드풀보다 더 효과적인 기법이나, 기능이 있는가 했지,
ㅁㄴㅇㄹ(58.140)2015-05-10 01:56
ㄴ 스레드관련 API 정리 해볼겸, 스레드풀 한번 만들어봐야겠다, 125.128 횽 땡큐 ㅇㅇ
ㅁㄴㄹㅇ(58.140)2015-05-10 01:57
아니 그런 게 있을 리가 :) 하나의 개념 같은 건데. 작업마다 스레드를 일일이 다 만들면 너무 버거워지고 비효율적이니까 스레드 만드는 개수에 제한을 둔 거지. 풀이라는 의미는 많은 경우 그런 걸 말함. 미리 어딘가에 만들어 두고 재활용하는 거.
ㅅㅅㅅ(125.128)2015-05-10 01:57
ㄴ 스레드 컨텍스트 전환 떄문에 ㅋㅋ 스레드 풀 기본 개념은 알어 ㅎㅎ
ㅁㄴㅇㄹ(58.140)2015-05-10 01:58
예를 들어 메모리 풀이라고 하면 미리 메모리를 많이 어딘가에 만들어 놓고 필요하면 할당해 놓은 메모리를 메모리 풀에서 가져다가 쓰고 필요 없어지면 메모리 풀에 다시 돌려 놓고. 뭐 이런 거지. 특별한 개념이 아니야. 최적화를 고민하면 누구나 떠올릴 수 있는 개념임. 스레드 풀은 사실상 네트워크 서버 만들 때나 쓰지 그 외에 쓸 일은 많이 없을 거야.
ㅅㅅㅅ(125.128)2015-05-10 01:59
컨텍스트 전환은 윈도우가 알아서 해 주는 거지 그걸 우리가 컨트롤할 방법은 없어. 컨트롤하려면 스레드가 아니라 파이버를 써야지.
ㅅㅅㅅ(125.128)2015-05-10 01:59
그리고 우선 순위(Priority) 말하는 거면 SetThreadPriority API로 직접 구현할 수 있음.
ㅅㅅㅅ(125.128)2015-05-10 02:03
ㄴ 생각해보니까 스레드 풀 자체를 구현한다는게, 굉장히 어렵네, 최대한 컨텍스트 최소화 시켜야하고, 적당한 수 스레드 유지시켜야하니까 ,
스레드 풀은 그냥 윈도우가 스레드 작업 관리를 위해 제공해 주는 기능 같은 거고... IOCP는 비동기적 작업을 위해 윈도우가 제공해 주는 인터페이스임. IOCP는 IOCP 인터페이스를 지원하는 API 쓸 때나 필요하지 그걸 직접 쓸 일은 거의 없음. 소켓 프로그래밍이나 파일 입출력, 일부 쉘 관련 함수 같은 거 쓸 때나 필요. 스레드 풀은 무슨 API가 있다는 것만 알고 써본 적은 없음. 그만큼 필요성이 낮음.
스레드 풀 API가 비스타 때 처음 나온 거라 그런 것도 있음. 스레드 풀을 대체할 방법은 얼마든지 있음.
ㄴ그럼 스레드 풀 대체할 방법이 어떤것들이 있는지 알려줘
아니 스레드 풀이라는 개념을 알면 굳이 MS가 제공해 주는 스레드 풀 API를 안 써도 스레드 생성 API만 알면 스레드 미리 여러 개 만들어 놓고 작업 큐 만들고 작업 있으면 꺼내서 처리해 주는 걸 직접 짜면 되잖아. MS는 이런 걸 API 형태로 편하게 제공해 주고 있는 거고.
ㄴ 나는 뭐 또 특별한, 스레드풀보다 더 효과적인 기법이나, 기능이 있는가 했지,
ㄴ 스레드관련 API 정리 해볼겸, 스레드풀 한번 만들어봐야겠다, 125.128 횽 땡큐 ㅇㅇ
아니 그런 게 있을 리가 :) 하나의 개념 같은 건데. 작업마다 스레드를 일일이 다 만들면 너무 버거워지고 비효율적이니까 스레드 만드는 개수에 제한을 둔 거지. 풀이라는 의미는 많은 경우 그런 걸 말함. 미리 어딘가에 만들어 두고 재활용하는 거.
ㄴ 스레드 컨텍스트 전환 떄문에 ㅋㅋ 스레드 풀 기본 개념은 알어 ㅎㅎ
예를 들어 메모리 풀이라고 하면 미리 메모리를 많이 어딘가에 만들어 놓고 필요하면 할당해 놓은 메모리를 메모리 풀에서 가져다가 쓰고 필요 없어지면 메모리 풀에 다시 돌려 놓고. 뭐 이런 거지. 특별한 개념이 아니야. 최적화를 고민하면 누구나 떠올릴 수 있는 개념임. 스레드 풀은 사실상 네트워크 서버 만들 때나 쓰지 그 외에 쓸 일은 많이 없을 거야.
컨텍스트 전환은 윈도우가 알아서 해 주는 거지 그걸 우리가 컨트롤할 방법은 없어. 컨트롤하려면 스레드가 아니라 파이버를 써야지.
그리고 우선 순위(Priority) 말하는 거면 SetThreadPriority API로 직접 구현할 수 있음.
ㄴ 생각해보니까 스레드 풀 자체를 구현한다는게, 굉장히 어렵네, 최대한 컨텍스트 최소화 시켜야하고, 적당한 수 스레드 유지시켜야하니까 ,