Giter VIP home page Giter VIP logo

Comments (7)

dbuenzli avatar dbuenzli commented on May 26, 2024 3

Using an Atomic.t value for the uid counter doesn't seem egregious.

from eio.

talex5 avatar talex5 commented on May 26, 2024 1

I think either that or a with_context function, which replaces the internal hmap for the duration of the function (much like Cancel.sub) would be good.

Oh, yeah, that's a better idea!

Do you want to make a PR? Using hmap would probably be fine. If not, I expect I'll get around to it myself at some point.

from eio.

talex5 avatar talex5 commented on May 26, 2024

Yes, I agree. It probably just needs an hmap in the fiber_context, alongside the thread ID:

and fiber_context = {
tid : Ctf.id;
mutable cancel_context : t;
mutable cancel_node : fiber_context Lwt_dllist.node option; (* Our entry in [cancel_context.fibers] *)
cancel_fn : (exn -> unit) option Atomic.t;
}

The main concern I have is about modular reasoning - ideally two components shouldn't be able to interact without first being introduced. e.g. in

let x = ref 0 in
let y = Foo.make x in
let z = Bar.make () in

we should be able to assume that z does not have access to x. However, if Foo.make can put x in a fiber-local variable then this doesn't hold.

I see a couple of reasonable approaches:

  1. Put this API in the Private module, so people know the usual rules don't apply, or
  2. Only allow setting fiber-local variables at fiber-creation time, which I think might solve it (needs more thought).

from eio.

SquidDev avatar SquidDev commented on May 26, 2024

Only allow setting fiber-local variables at fiber-creation time

I think either that or a with_context function, which replaces the internal hmap for the duration of the function (much like Cancel.sub) would be good. I guess the two are largely equivalent and can be used to implement the other!

from eio.

SquidDev avatar SquidDev commented on May 26, 2024

Using hmap would probably be fine.

I guess one thing worth mentioning here is that creating keys won't be domain/thread safe (as it just uses a non-atomic reference cell). I assume that's fine, as long as it's documented?

from eio.

talex5 avatar talex5 commented on May 26, 2024

Yes, for now. Might be worth checking if @dbuenzli is interested in making hmap multicore safe.

from eio.

SquidDev avatar SquidDev commented on May 26, 2024

Added in #256

from eio.

Related Issues (20)

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.