bsnes is a Super Nintendo (SNES) emulator focused on performance, features, and ease of use.
Go to file
Tim Allen 4f75515cd3 doc: Add example programs using libco.
These examples were originally included in various standalone libco
releases, not as part of any higan or bsnes release. test_timing in
particular is a benchmark and smoke-test as well as a basic example
of how to use libco.
2021-01-22 18:10:06 +11:00
doc doc: Add example programs using libco. 2021-01-22 18:10:06 +11:00
LICENSE Add a copy of the ISC license. 2020-08-24 21:52:19 +10:00
README.md Change docs from HTML to MD 2020-06-06 16:29:44 +02:00
aarch64.c Moved the libc override macros to settings.h, and removed __VA_ARGS__ 2020-06-06 18:57:44 +05:30
amd64.c Moved the libc override macros to settings.h, and removed __VA_ARGS__ 2020-06-06 18:57:44 +05:30
arm.c Moved the libc override macros to settings.h, and removed __VA_ARGS__ 2020-06-06 18:57:44 +05:30
fiber.c Make comments ANSI C compliant 2020-10-09 02:30:21 +11:00
libco.c v106.223 2019-10-20 00:28:09 +09:00
libco.h Added void to function signatures, in order to fix Clang's -Wstrict-prototypes 2020-06-25 11:39:40 +05:30
ppc.c Moved the libc override macros to settings.h, and removed __VA_ARGS__ 2020-06-06 18:57:44 +05:30
ppc64v2.c Make comments ANSI C compliant 2020-10-09 02:30:21 +11:00
settings.h C89 requires __STDC__ to be defined, but not __STDC_VERSION__ 2020-10-17 10:46:43 +11:00
sjlj.c v106.224 2019-10-20 01:14:04 +09:00
ucontext.c v106.224 2019-10-20 01:14:04 +09:00
x86.c Moved the libc override macros to settings.h, and removed __VA_ARGS__ 2020-06-06 18:57:44 +05:30

README.md

libco

libco is a cooperative multithreading library written in C89.

Although cooperative multithreading is limited to a single CPU core, it scales substantially better than preemptive multithreading.

For applications that need 100,000 or more context switches per second, the kernel overhead involved in preemptive multithreading can end up becoming the bottleneck in the application. libco can easily scale to 10,000,000 or more context switches per second.

Ideal use cases include servers (HTTP, RDBMS) and emulators (CPU cores, etc.)

It currently includes backends for:

  • x86 CPUs
  • amd64 CPUs
  • PowerPC CPUs
  • PowerPC64 ELFv1 CPUs
  • PowerPC64 ELFv2 CPUs
  • ARM 32-bit CPUs
  • ARM 64-bit (AArch64) CPUs
  • POSIX platforms (setjmp)
  • Windows platforms (fibers)

See [doc/targets.md] for details.

See [doc/usage.md] for documentation.

License

libco is released under the ISC license.