[HN Gopher] Libcsp: a fast C concurrency library influenced by t...
       ___________________________________________________________________
        
       Libcsp: a fast C concurrency library influenced by the CSP model
        
       Author : lime66
       Score  : 52 points
       Date   : 2020-04-06 20:11 UTC (2 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | grayed-down wrote:
       | Hmm...nice examples. Let's give this a whirl. Thanks!
        
       | [deleted]
        
       | marios wrote:
       | Does anyone have resources related to learning concurrency ?
       | 
       | I've had a very short introduction to pthreads in a CS class, but
       | it was too succinct to get any practical benefit IMO. Knowing
       | that a mutex can be used to limit access to a shared variable is
       | easy enough to understand. How to structure software that runs
       | concurrent tasks is still a mystery to me. Code I've written that
       | uses threads appears to work but I'm not confident I haven't
       | introduced a deadlock in there that's just waiting the worst
       | possible timing to trigger. For instance, the pthreads manpage
       | does a good job at listing the available functions. I have no
       | idea when they should be used though.
       | 
       | If anyone can point me to learning resources around concurrency
       | (books, presentations, talks, sample open source software that
       | does good use of concurrency patterns, ... anything goes, really)
       | I will be eternally grateful.
        
       | metroholografix wrote:
       | There is also http://libdill.org/ which has a different, better
       | in my view, model and I have actually used in production.
        
         | latenightcoding wrote:
         | I dont think libdill supports multiple CPUs, which is really
         | hard to get right
        
           | ioquatix wrote:
           | You run multiple instances, one per CPU core.
        
             | latenightcoding wrote:
             | there is a huge difference between running an instance per
             | CPU and letting a smart scheduler orchestrate things for
             | you.
        
           | armitron wrote:
           | Well it does not allow coroutines to migrate to different OS
           | threads and handles to be shared across OS threads, but that
           | does not mean it doesn't support multiple CPUs.
           | 
           | It's more correct to say that it doesn't come with that
           | support out of the box, but it certainly does allow for it
           | and nudges you towards a specific direction (no shared
           | mutable state).
        
       | giancarlostoro wrote:
       | The side by side with Go is actually impressive:
       | 
       | https://libcsp.com/
        
         | pickdenis wrote:
         | I suspect it stops being so nice when you want to do something
         | equivalent to go's `select` statement. Though that's purely
         | speculation, and if I'm wrong it should definitely go in the
         | examples!
        
           | dallbee wrote:
           | Your skepticism made me look through the library more
           | carefully. I came across some limitations in comparison to
           | what Go provides:
           | 
           | 1. As you suggest, there's no equivalent to the `select`
           | mechanism. To perform the equivalent, you must busy loop and
           | call `csp_chan_try_pop`.
           | 
           | 2. It appears you cannot nest coroutines.
           | 
           | 3. The mutex implementation does not provide an RWMutex.
           | 
           | 4. `csp_yield` seems somewhat necessary for practical
           | applications.
           | 
           | Normally I would not use another language as a basis for
           | comparison to a C library, but that's precisely what the
           | author of Libcsp appears to be aiming for.
           | 
           | All that said, there's a really slick implementation of a
           | lock free RB queue backing this library, and It's a neat
           | project. I think it would stand on its own better than as a
           | "go style in C" library.
        
       | jagged-chisel wrote:
       | The linked Wikipedia article[1] on CSP says
       | 
       | > communicating sequential processes (CSP) is a formal language
       | for describing patterns of interaction in concurrent systems
       | 
       | The Libcsp project says it's _influenced_ by CSP. Does libcsp
       | stick to this formal language?
       | 
       | 1 -
       | https://en.wikipedia.org/wiki/Communicating_sequential_proce...
        
         | wnoise wrote:
         | Of course not. It implements much (not all!) of the available
         | semantics of CSP, but does so embedded in the C language with
         | function calls and macros. Though macros can do truly
         | disturbing things in C, these are not enough to truly implement
         | the syntax of CSP.
        
       ___________________________________________________________________
       (page generated 2020-04-06 23:00 UTC)