![]() Since a GC with accounting doesn't run in parallel, it discards owner-thread information (ironically) that is used for parallel collection. Losing ownership information could reduce parallelism in later collections --- but only if they run without accounting. This commit does not turn on ownership tracking, however, because experiments suggest that it isn't worthwhile for Racket: * Preserving ownership information slows down a major collection in accounting mode by 5-10%. * Racket uses accounting mode only for full collections, and the loss of ownership information would mostly affect only later full collections. Since accounting momde tends to stick around, very little parallelism is actually lost. * Without further work, accounting mode cannot benefit from parallelization, because it works by stepping sequentially through accounting domains, and that aligns with thread ownership. A possible improvement is to look ahead in the accounting-domain object sequence to find one that starts in another ownership domain, and then constrain concurrent tracing from that object to keep the count private and not leave the ownership domain until the accounting sequence has caught up. Besides making it easier to turn on "parallel" collection for accounting mode, the small refactorings here make it easier to bring more things, like guardian and weak-pair handling, into the parallel part of a collection. So, the changes are probably worth keeping for that purpose. |
||
---|---|---|
.github | ||
pkgs | ||
racket | ||
.gitattributes | ||
.gitignore | ||
.lgtm.yml | ||
.mailmap | ||
.makefile | ||
build.md | ||
LICENSE | ||
Makefile | ||
README.md |
Racket is a general-purpose programming language and an ecosystem for language-oriented programming.
This repository holds the source code for the core of Racket plus some related packages. The rest of the Racket distribution source code is in other repositories, mostly under the Racket GitHub organization.
Quick Start
Pre-built versions of Racket for a variety of operating systems and architectures, as well as convenient source distributions are available at
https://download.racket-lang.org
Racket comes with extensive documentation, including several tutorials. You can read all of this documentation, as well as documentation for third-party packages at
Building from Source
For information on building Racket from this repository, see the Build Guide.
Contributing
Contribute to Racket by submitting a pull request, joining the development mailing list, or visiting the IRC or Slack channels.
By making a contribution, you are agreeing that your contribution is licensed under the LGPLv3, Apache 2.0, and MIT licenses. Those licenses are available in this repository in the files racket/src/LICENSE-LGPL.txt, racket/src/LICENSE-APACHE.txt, and racket/src/LICENSE-MIT.txt.
See the Racket Build Guide for more guidance on contributing.
The Friendly Environment Policy contains guidelines on expected behavior within the Racket community.
License
Racket is free software; see LICENSE for more details.