codememo

여러 스레드에서 Bhem GC를 독립적으로 실행

tipmemo 2023. 8. 1. 20:34
반응형

여러 스레드에서 Bhem GC를 독립적으로 실행

저는 러스트를 위해 hm GC에 바인딩을 작성하는 실험을 하고 있습니다.

일부 배경:러스트는 동시성이 높은 언어로 설계되었으며, 이 설계의 결과는 GC 포인터를 할당된 스레드 내로 정적으로 제한할 수 있는 기능을 가지고 있습니다(, 스레드 x에 할당된 GC 포인터는 다른 스레드에 의해 활성 상태로 유지되거나 전혀 참조될 수 없습니다).

따라서 저는 hm이 성능을 최대한 활용하도록 유도하고 싶습니다.

  1. 여러 스레드에서 할당하고 수집할 수 있도록 스레드 세이프
  2. 가능한 한 적게 수집(즉, 현재 스레드만)을 중지합니다. 다른 스레드는 자신의 외부에 있는 GC 포인터와 관련된 어떤 것도 간섭할 수 없기 때문에 계속 실행할 수 있습니다.
  3. 가급적이면 서로 다른 스레드의 GC "인스턴스" 간에 동기화되지 않고 전적으로 로컬 스레드입니다.

1은 쉽지만, 2와 3을 위한 시설을 찾을 수 없습니다.가장 중요한 부분은 1과 2입니다. 왜냐하면 다른 스레드가 수행하는 작업과 관계없이 백그라운드에서 스레드를 실행할 수 있기 때문입니다(모두 할당하고 기가바이트의 메모리를 가비지 수집하더라도).

(저는 &에 대해 알고 있지만, 그것이 3을 완전히 만족시키는 것은 아닙니다. 단지 더 효율적으로 만들 뿐입니다. 하지만 스레드 간에 로컬로 할당된 포인터를 전송하는 것은 여전히 유효하지만, 저는 그 보증이 필요하지 않습니다.)

나는 hm과 이것을 어떻게 해야 할지에 대한 답을 가지고 있지 않습니다.그러나 여기에는 스레드당 완전히 독립적인 GC 컨텍스트를 가질 수 있을 정도로 충분한 제어와 캡슐화를 가진 것으로 보이는 두 개의 GC가 있습니다.

Facility 3은 수집기의 각 글로벌 변수를 스레드 로컬 변수로 선언하여 Beohm GC 포크로 구현되는 것 같습니다. - https://github.com/Samsung/gcutil/commit/0cc277fb0cef82d515cc4ff4a439e50568474e16

언급URL : https://stackoverflow.com/questions/20921988/running-boehm-gc-in-multiple-threads-independently

반응형