memory pool은 어떻게 구현하나요? static 영역 자체가 memory pool인가요??
코세제자(121.187)2016-04-24 01:06
보통은 그냥 쓰레드 초기화할 때 malloc 같은걸로 사용할 메모리를 미리 크게 한방 잡으면 됨. 다른 방법으로 직접 page를 따와서 머시기머시기 하기도 하는데 그럴 필요까진 잘 없음.
땡칠도사(07dosa)2016-04-24 01:11
malloc을 크게 잡아서 linked list 같은거로 나눠서 사용하면 되나요??? 해제는 쓰레드가 끝나는 시점에 하구요?
코세제자(121.187)2016-04-24 01:21
static 영역도 따지고 보면 변하지 않는 부분이니 memory pool로 볼수 없는건가요??
코세제자(121.187)2016-04-24 01:21
변하지 않는 것하고 memory pool은 상관 없음. 그냥 접근되고 쓸 수만 있으면 됨 ㅇㅇ 그리고 메모리 chunk를 어떻게 나누느냐는 그냥 짜는 놈 마음임.
땡칠도사(07dosa)2016-04-24 01:28
땡칠 // memory pool을 사용하는 이유가.. malloc free/ new delete의 잦은 호출로 인한 단편화로 인해 성능 저하 문제가 발생하는데... 해결법중에 하나가 고정된 memory pool로 큰 메모리 공간을 잡아서 그 공간을 사용하여 단편화를 막는단 건가요??
코세제자(121.187)2016-04-24 01:31
memory pool로 만든 공간을 나누어 쓰게되면 그 나눈 공간에서도 결국 단편화가 생기지 않나요?? 단편화를 막을려면 각각 나눈 공간을 linked list처럼 연결시켜주는 방법 밖에 없지 않나요??
코세제자(121.187)2016-04-24 01:32
linked list하고 단편화 방지하고 상관 없음. 단편화 막으려면 풀 자체를 다른 기준(생존시간/용도 등)으로 또 나눠서 관리하는 방법이 일단 보편적임.
땡칠도사(07dosa)2016-04-24 01:39
memory pool을 잡는 이유는 뭐 여러가지 있음. thread 마다 하나씩 만들어서 race-condition을 방지하는 것도 있고, 방금 언급한 것처럼 단편화 방지를 위해서 쓸 수도 있음. pool마다 다른 allocation 알고리즘을 적용할 수도 있음.
땡칠도사(07dosa)2016-04-24 01:39
아아 무슨 말인지 알거같아여!! 땡칠도사님 답변 감사합니다!!!!
코세제자(121.187)2016-04-24 01:40
race-condition 이게 무슨 의미인지 알려주실 수 있나요??
코세제자(121.187)2016-04-24 01:40
아아 검색해서 알았습니다 ㅋㅋ 답변 정말 감사합니다!!
코세제자(121.187)2016-04-24 01:41
이건 병렬처리 문제인데, 어떤 일련의 순서가 중요한 작업들을 복수의 쓰래드/프로세스에서 분산시켜 실행을 할 때, 작업의 세부 단계가 순서에서 어긋나게 실행되는 경우를 통칭하는 용어임. 예를들면 1,2,3,4를 찍는 프로그램을 멀티쓰레딩으로 (잘못) 구현하면 3,1,4,2 같은 결과가 나오는 경우.
땡칠도사(07dosa)2016-04-24 01:44
아놔 - _-)
땡칠도사(07dosa)2016-04-24 01:44
아아 간단하게 의미만 검색햇었는데, 추가설명 감사합니다!!! 복받으실거에요!! 감사합니다!
memory pool은 어떻게 구현하나요? static 영역 자체가 memory pool인가요??
보통은 그냥 쓰레드 초기화할 때 malloc 같은걸로 사용할 메모리를 미리 크게 한방 잡으면 됨. 다른 방법으로 직접 page를 따와서 머시기머시기 하기도 하는데 그럴 필요까진 잘 없음.
malloc을 크게 잡아서 linked list 같은거로 나눠서 사용하면 되나요??? 해제는 쓰레드가 끝나는 시점에 하구요?
static 영역도 따지고 보면 변하지 않는 부분이니 memory pool로 볼수 없는건가요??
변하지 않는 것하고 memory pool은 상관 없음. 그냥 접근되고 쓸 수만 있으면 됨 ㅇㅇ 그리고 메모리 chunk를 어떻게 나누느냐는 그냥 짜는 놈 마음임.
땡칠 // memory pool을 사용하는 이유가.. malloc free/ new delete의 잦은 호출로 인한 단편화로 인해 성능 저하 문제가 발생하는데... 해결법중에 하나가 고정된 memory pool로 큰 메모리 공간을 잡아서 그 공간을 사용하여 단편화를 막는단 건가요??
memory pool로 만든 공간을 나누어 쓰게되면 그 나눈 공간에서도 결국 단편화가 생기지 않나요?? 단편화를 막을려면 각각 나눈 공간을 linked list처럼 연결시켜주는 방법 밖에 없지 않나요??
linked list하고 단편화 방지하고 상관 없음. 단편화 막으려면 풀 자체를 다른 기준(생존시간/용도 등)으로 또 나눠서 관리하는 방법이 일단 보편적임.
memory pool을 잡는 이유는 뭐 여러가지 있음. thread 마다 하나씩 만들어서 race-condition을 방지하는 것도 있고, 방금 언급한 것처럼 단편화 방지를 위해서 쓸 수도 있음. pool마다 다른 allocation 알고리즘을 적용할 수도 있음.
아아 무슨 말인지 알거같아여!! 땡칠도사님 답변 감사합니다!!!!
race-condition 이게 무슨 의미인지 알려주실 수 있나요??
아아 검색해서 알았습니다 ㅋㅋ 답변 정말 감사합니다!!
이건 병렬처리 문제인데, 어떤 일련의 순서가 중요한 작업들을 복수의 쓰래드/프로세스에서 분산시켜 실행을 할 때, 작업의 세부 단계가 순서에서 어긋나게 실행되는 경우를 통칭하는 용어임. 예를들면 1,2,3,4를 찍는 프로그램을 멀티쓰레딩으로 (잘못) 구현하면 3,1,4,2 같은 결과가 나오는 경우.
아놔 - _-)
아아 간단하게 의미만 검색햇었는데, 추가설명 감사합니다!!! 복받으실거에요!! 감사합니다!