[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)