GithubHelp home page GithubHelp logo

fairness's Introduction

Fairness of Go channels

Assume there is a channel where routines listen for new data. As soon as there is new data arriving on that channel some routine will pick it up. However, what happens when mulitple routines are ready to receive new data, who will get it? Will the data be distributed evenly?

Yes, I think so.

I conducted a small experiment (uniformity/) where a producer sends data on a channel but waits a short amount of time before sending the next one, such that all routines have a chance to get ready (sure, better to use sync.WaitGroup but a timeout does its job in this case). It turns out for a large enough timeout (10 miliseconds in my case) each routine receives the same amount of data.

Is the routine selected randomly?

I doubt that.

If it is random it makes sense that with large number of data each routine will receive roughly equally many (according to the law of large numbers). However, even if there are equally many routines as there is data to be sent each routine will receive data exactly one, which is unlikely (1 / n! if I'm not mistaken). Thus I think they are deterministically managed to be distributed as evenly as possibly, for example using a FIFO queue.

Indeed, our second experiments (scheduling/) suggests there is no counter keeping track of how often each routine received a data-item, thus keeping a FIFO queue a real possibility.

fairness's People

Contributors

elwin 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.