0

프리리스트는 이미 할당 된 기존 메모리를 재사용함으로써 할당 속도를 높이는 일반적인 방법입니다. 동시 할당 자의 자유 목록을 사용할 수있는 방법이 있습니까? 할당에 대한 잠금 오버 헤드가 발생하지 않습니다 (freelist의 의도 된 성능 향상을 무력화시키는)?동시 할당자가있는 프리리스트

답변

1

lock-free linked list을 사용하십시오.

+0

실제로 잠금을 사용하는 것보다 성능이 좋습니까? 잠금 해제 된 데이터 구조는 일반적으로 잠긴 변형과 거의 같은 속도를 갖지만 교착 상태가 발생할 가능성은 없습니다. –

+0

경합이 거의 없다면 특히 lock을 사용하면 OS 호출이 발생할 경우 lock-free 구현이 lock (읽기 - 수정 - 쓰기 - 잠금 해제 대신 읽기 - 수정 - 쓰기)을 사용하여 성능이 향상되어야합니다. 무거운 경합이있는 경우, 잠금 해제 구현은 실제로 성능을 저하시킬 수 있습니다 (반복적으로 다시 시도하고 다시 시도해야하기 때문에). 그런 종류의 상황에서는 잠긴 구현이있는 여러 스레드를 사용하여 실제로 아무것도 얻을 수 없습니다. if 연결된 목록 돌연변이가 대부분의 작업이며, 대부분의 작업은 어쨌든 직렬화됩니다. – moonshadow

0

스레드 별 자유 목록 청크가있을 수 있습니다.

기본적으로 무료 목록 (예 : 가비지 수집기)을 채우는 시스템이 있습니다. 그런 다음 각 스레드는 적은 수의 항목을 포함하는 자체의 자유 목록 청크를 가질 수 있습니다. 잠금은 새 청크를 할당하는 데 사용됩니다. 30 개의 항목이있는 청크의 경우 30 개의 할당마다 한 번만 잠글 것입니다. 반대로 스레드 별 청크가 있으면 일부 GC가 여전히 사용 가능한 항목이 있어도 공유 목록이 비어있을 수 있으므로 GC를 더 빨리 실행해야 할 수 있습니다.