تشغيل Boehm GC في عدة خيوط بشكل مستقل



multithreading garbage-collection (1)

أنا أجرب كتابة بعض bindings إلى Boehm GC for Rust.

بعض الخلفية: تم تصميم Rust لتكون لغة متزامنة عالية ، ونتيجة لهذا التصميم لديها القدرة على تقييد مؤشرات GC بشكل ثابت داخل سلاسل العمليات التي تم تخصيصها فيها (أي ، مؤشر GC المخصص في مؤشر الترابط x يمكن لا تبقى أبدًا حيًا (أو حتى يتم الرجوع إليها على الإطلاق) بواسطة مؤشر ترابط آخر).

وبالتالي ، أود أن أدفع Boehm للاستفادة من هذا الأداء قدر الإمكان:

  1. مؤشر ترابط آمن ، لذلك يمكنني تخصيص وجمع من مؤشرات ترابط متعددة
  2. مجموعات إيقاف أقل قدر ممكن (أي فقط سلسلة الرسائل الحالية) ، يمكن أن تستمر سلاسل العمليات الأخرى لأنها لا يمكن أن تتداخل مع أي شيء ذي صلة بمؤشرات GC خارج نفسها
  3. من الأفضل أن يكون هناك ترابط محلي تمامًا مع عدم وجود تزامن بين "مثيلات" GC لمؤشرات الترابط المختلفة

1 سهل ، لكن لا يمكنني العثور على أي تسهيلات لـ 2 و 3. الجزء الأكثر أهمية هو 1 و 2 لأنني أريد أن أكون قادرًا على تشغيل سلاسل رسائل في الخلفية ، بغض النظر عن ما تفعله مؤشرات الترابط الأخرى (حتى لو انهم جميعا تخصيص وجمع القمامة غيغابايت من الذاكرة).

( أعرف معلومات عن THREAD_LOCAL_ALLOC & gc_thread_local.h ، لكن هذا لا يرضي تمامًا 3 ، فهو يجعله أكثر كفاءة ، لكن لا يزال صالحًا نقل المؤشرات المخصصة لمؤشر الترابط محليًا بين THREAD_LOCAL_ALLOC gc_thread_local.h ، بينما لا أحتاج هذا الضمان.)


ليس لدي إجابة حول كيفية القيام بذلك مع Boehm. ومع ذلك ، يوجد نوعان من GCs يبدو أنهما يتمتعان بما يكفي من التحكم والتضمين للحصول على سياق GC مستقل تمامًا لكل مؤشر ترابط.





boehm-gc