Git Product home page Git Product logo

nodejs-c-io_uring-example's Introduction

MetaCall NodeJS C io_uring Example

io_uring is a new Linux Kernel interface that speeds up I/O operations in comparison to previous implementations like libuv (the library that NodeJS uses internally for handling I/O).

This interface is offered through liburing, which provides a C API for accessing it. We could write a NodeJS extension by using N-API, or use ffi in order to call to the library.

Developing those wrappers is costly because either we have to write C/C++ or JavaScript boilerplate. So instead of doing that, we will be using MetaCall in order to achieve this.

MetaCall allows to transparently call to C functions, we can implement anything in C and without need to compile it manually (it will be JITed at load time). So basically we can load C code directly into NodeJS. For example:

int sum(int a, int b) {
	return a + b;
}
const { sum } = require("./sum.c");

sum(3, 4) // 7

With this we can use our C library not only from NodeJS but from any other language, for example, Python:

from sum.c import sum

sum(3, 4) # 7

We will be avoiding all the boilerplate and we will have a single interface for all languages. The calls will be also type safe and we will avoid a lot of errors and time for maintaining the wrappers for each language that we can spend focusing on the development.

In this example we want to bring the power of io_uring to NodeJS for maximizing the speed of I/O and outperform NodeJS native primitives like http module. For demonstrating it, we have a server_listen function which creates a simple HTTP server in the port 8000.

Docker

Building and running with Docker:

docker build -t metacall/nodejs-c-liburing-example .
docker run --rm -p 8000:8000 -it metacall/nodejs-c-liburing-example

Accessing to the website

Just go to your web browser and enter this url: localhost:8000

nodejs-c-io_uring-example's People

Contributors

viferga avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.