Giter Site home page Giter Site logo

quanta's Introduction

quanta

conduct-badge gh-actions-badge downloads-badge release-badge docs-badge libraries-io-badge license-badge

quanta is a high-speed timing library, useful for getting the current time very quickly, as well as manipulating it.

code of conduct

NOTE: All conversations and contributions to this project shall adhere to the Code of Conduct.

usage

The API documentation of this library can be found at docs.rs/quanta.

general features

  • count CPU cycles via Time Stamp Counter (TSC). or
  • get monotonic time, in nanoseconds, based on TSC (or OS fallback)
  • extremely low overhead where possible
  • mockable
  • cross-platform
  • fun, science-y name!

platform / architecture support

For most major platforms -- Linux, Windows, and macOS -- with processors made around or after 2008, you should have no problems using quanta with full TSC support. quanta will always fallback to the included stdlib timing facilities if TSC support is not present. The biggest caveat to this, as evidenced in the compatibility matrix below, is that we only support the TSC on x86/x86_64 platforms.

Platform stdlib fallback TSC support? CI tests?
Linux (x86/x86_64)
Linux (MIPS/ARM)
Windows (x86/x86_64)
Windows (ARM)
macOS (x86/x86_64)
macOS (ARM)
iOS (ARM)

performance

quanta sits neck-and-neck with native OS time facilities: the cost of Clock::now is on par Instant::now from the stdlib, if not better.

why use this over stdlib?

Beyond having a performance edge in specific situations, the ability to use mocked time makes it easier to actually test that your application is doing the right thing when time is involved.

Additionally, and as mentioned in the general features section, quanta provides a safe/thin wrapper over accessing the Time Stamp Counter, which allows measuring cycle counts over short sections of code. This can be relevant/important for accurately measuring performance-critical sections of code.

alternative crates

  • chrono:
    • based on std::time::SystemTime: non-monotonic reads
    • focused on timezone-based "date/time" measurements, not intervals/elapsed time
    • clock cannot be altered at all (no pause, no discrete updates)
  • time:
    • based on std::time::SystemTime and std::time::Instant:
      • time::Time/time::PrimitiveDateTime use SystemTime: non-monotonic reads
      • time::Instant uses Instant: monotonic reads
    • focused on timezone-based "date/time" measurements, not interval/elapsed time
    • clock cannot be altered at all (no pause, no discrete updates)
  • clock:
    • based on std::time::SystemTime: non-monotonic reads
    • clock can be swapped (trait-based)
    • no free function for acquiring time
  • clocksource:
    • based on TSC w/ OS fallback; non-monotonic reads
    • clock cannot be altered at all (no pause, no discrete updates)
    • depends on unstable asm! macro + feature flag to enable TSC
    • no free function for acquiring time
  • pausable_clock:
    • based on std::time::Instant: monotonic reads
    • clock can be paused (time can be delayed, but not discretely updated)
    • no free function for acquiring time

license

quanta is licensed under the MIT license. (LICENSE or http://opensource.org/licenses/MIT)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.