News for hackers. Stuff that matters.
Re:Changing the Rules of Rust by yencabulator on Sunday September 17, 2023 @10:29PM (#37551535)
The classic case where Arc hurts and GC really shines is Arc<Config>.

Arc makes otherwise read-only activity write.

Re:Changing the Rules of Rust by pkolaczk on Monday September 18, 2023 @01:33AM (#37552564)
How many independent things do you need to access the config? A dozen? Then there is a dozen calls to inc the RC at startup, but there is no later cost to read from object behind Arc. So you may read your config a million times and Arc changes nothing. While GC will have to scan the Config structure every time a full GC is needed, so there is an added cost.
Re:Changing the Rules of Rust by yencabulator on Monday September 18, 2023 @10:05AM (#37556290)
In the trouble scenario, config may change at any time.
Re:Changing the Rules of Rust by scottlamb on Monday September 18, 2023 @11:19AM (#37557392)
The C++ server I mentioned had an "experiment config" that would be used to roll out changes (user-visible features, backend code path changes for data store migrations, etc.) incrementally, and it picked up config changes without a restart. Each request needed to grab the current experiment config once and hold onto it for a consistent view. This server reserved ~16 cores and had pretty high request rates, so Arc<Config> would indeed hit the sort of problem yencabulator is describing. And I imagine it'd get pretty bad if each server crossed NUMA node boundaries (although I recommend avoiding that if you can regardless).

In this case, the Linux rseq-based epoch GC worked perfectly. It is technically a form of garbage collection, but it's not all-or-nothing like Java-style or Bohm GC; it's just a library you use for a few highly used, infrequently updated data structures.

Re:Changing the Rules of Rust by insanitybit on Monday September 18, 2023 @03:14PM (#37560639)
I'm not really understanding why you need to clone the Arc so many times. At most it seems that you'd do so once per request.
Re:Changing the Rules of Rust by scottlamb on Monday September 18, 2023 @04:30PM (#37561570)
"So many times" = one increment + one decrement per request = 100k/sec maybe, bouncing cache lines across 16 cores. This is suboptimal but not world-ending.
Re:Changing the Rules of Rust by insanitybit on Monday September 18, 2023 @06:35PM (#37563074)
Definitely suboptimal, no question.