Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality. Learn more →
Top 10 C Concurrency Projects
-
ck
Concurrency primitives, safe memory reclamation mechanisms and non-blocking (including lock-free) data structures designed to aid in the research, design and implementation of high performance concurrent systems developed in C99+.
-
InfluxDB
Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
-
WorkOS
The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.
-
lispBM
An interpreter for a concurrent lisp-like language with message-passing and pattern-matching implemented in C.
Project mention: Show HN: A pure C89 implementation of Go channels, with blocking selects | news.ycombinator.com | 2023-12-13libmill (https://github.com/sustrik/libmill) and libdill (https://github.com/sustrik/libdill) should be similar and probably mentioned.
As far as I understand the differences between CspChan and libmill might be that libmill also implements lightweight tasks (coroutines) and everything that goes with it (IO multiplexing, async timers, etc), while CspChan uses OS threads?
Most of the speed I believe is from using the server iodine https://github.com/boazsegev/iodine which is a wrapper around facil.io https://facil.io that is built using C.
Project mention: Show HN: A pure C89 implementation of Go channels, with blocking selects | news.ycombinator.com | 2023-12-13libmill (https://github.com/sustrik/libmill) and libdill (https://github.com/sustrik/libdill) should be similar and probably mentioned.
As far as I understand the differences between CspChan and libmill might be that libmill also implements lightweight tasks (coroutines) and everything that goes with it (IO multiplexing, async timers, etc), while CspChan uses OS threads?
When using green threads/fibers/coroutines, an interesting technique to make signal handling safer is to run the signal handler asynchronously on a separate fiber/green thread. That way most of the problems of dealing with signals go away, and there's basically no limitation on what you can do inside the signal handler.
I've successfully used this technique in Polyphony [1], a fiber-based Ruby gem for writing concurrent programs. When a signal occurs, Polyphony creates a special-purpose fiber that runs the signal handling code. The fiber is put at the head of the run queue, and is resumed once the currently executed fiber yields control.
[1] https://github.com/digital-fabric/polyphony
Code: https://github.com/svenssonjoel/lispBM
C Concurrency related posts
- Show HN: A pure C89 implementation of Go channels, with blocking selects
- Polyphony 1.4 Released
- Polyphony: Fine-Grained Concurrency for Ruby
- Rpmalloc – General Purpose Memory Allocator
- Polyphony 0.99 released. Last release before 1.0!
- How can I communicate across coroutines?
- Falsehoods programmers believe about undefined behavior
-
A note from our sponsor - InfluxDB
www.influxdata.com | 26 Apr 2024
Index
What are some of the best open-source Concurrency projects in C? This list will help you:
Project | Stars | |
---|---|---|
1 | libmill | 2,701 |
2 | ck | 2,293 |
3 | facil.io | 2,000 |
4 | libdill | 1,658 |
5 | libcsp | 1,289 |
6 | umka-lang | 968 |
7 | Polyphony | 651 |
8 | cone | 502 |
9 | lispBM | 74 |
10 | moonagents | 5 |
Sponsored