On 20/08/2014, at 12:17 AM, srean wrote:

> Could you describe the performance characteristic of reading from or writing 
> to an schannel. Is it fair to assume its going to be no more expensive than 
> writing/reading through a pointer (sans the scheduling delays).

The library reads/writes values, the operation pointers, so the library
makes a heap copy on write. Dispatch is through a couple of levels
of the RTL, the final code is here, in src/rtl/flx_sync.cpp:

void sync_sched::do_sread()
    {
      readreq_t * pr = (readreq_t*)request->data;
      schannel_t *chan = pr->chan;
      if(debug_driver)
        fprintf(stderr,"[sync: svc_read] Request to read on channel %p\n",chan);
      if(chan==NULL) goto svc_read_none;
    svc_read_next:
      {
        fthread_t *writer= chan->pop_writer();
        if(writer == 0) goto svc_read_none;       // no writers
        if(writer->cc == 0) goto svc_read_next;   // killed
        readreq_t * pw = (readreq_t*)writer->get_svc()->data;
        if(debug_driver)
          fprintf(stderr,"[sync: svc_read] Writer @%p=%p, read into %p\n", 
            pw->variable,*(void**)pw->variable, pr->variable);
        *(void**)pr->variable = *(void**)pw->variable;
        // reader goes first!
        active->push_front(writer);
        collector->add_root(writer);
        return;
      }

    svc_read_none:
      if(debug_driver)
        fprintf(stderr,"[sync: svc_read] No writers on channel %p: 
BLOCKING\n",chan);
      chan->push_reader(ft);
      forget_current();
      return;
    }

The write operation is similar.

--
john skaller
skal...@users.sourceforge.net
http://felix-lang.org




------------------------------------------------------------------------------
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to