Coder Social home page Coder Social logo

coyote-pool's Introduction

coyote-pool

A thread pool written in Zig

Builds against zig 0.10.0+

Example

const std = @import("std");
const log = std.log.scoped(.example);
const assert = std.debug.assert;

const Coyote = @import("coyote-pool");

const triangle_num: u64 = 3000000000;
const num_additions_per_task = 2000000;
const num_tasks = (triangle_num) / (num_additions_per_task);

pub fn main() void {
    var pool = Coyote.Pool.init(8);
    defer pool.deinit();

    var subsets: []NumberSubset = Coyote.allocator.alloc(NumberSubset, num_tasks) catch unreachable;

    var next: u64 = 0;
    var i: usize = 0;
    var elapsed = std.time.milliTimestamp();
    while(i < num_tasks) : (i += 1) {
        subsets[i].start = next;
        subsets[i].end = subsets[i].start + num_additions_per_task - 1;
        next = subsets[i].end + 1;
        _ = pool.add_work(&addNumberSubset, @ptrCast(*anyopaque, &subsets[i]));
    }

    pool.pause();
    pool._resume();
    pool.wait();

    i = 0;
    var result: u64 = 0;
    while (i < num_tasks) : (i += 1) {
        result += subsets[i].total;
    }
    elapsed = std.time.milliTimestamp() - elapsed;
    log.info("triangle: {} result: {} elapsed: {}ms", .{ (triangle_num * (triangle_num + 1) / 2), result, elapsed});

    
}

const NumberSubset = struct {
    start: u64,
    end: u64,
    total: u64,
};

pub fn addNumberSubset(arg: *anyopaque) void {
    var subset = @ptrCast(*NumberSubset, @alignCast(@alignOf(NumberSubset), arg));
    subset.total = 0;
    while (subset.start <= subset.end) : (subset.start += 1) {
        subset.total += subset.start + 1;
    }
}

coyote-pool's People

Contributors

linuxy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

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.