Student: | Eduardo Rodríguez Fernández | Abstract: Most of the popular modern web development frameworks, like Node.js and Go, handle the creation and management of a backend service in a mostly abstracted high- level way that does not allow a developer much freedom to modify the inherent system architecture of the server. Such an inflexible and abstracted, often plug-and-play, server implementation helps to facilitate web development by concealing the system-level design choices from the end user. Modern web frameworks mostly try to handle concurrent client connections in user-space under the premise that handling concurrency in kernel-space is too costly. The problem of blindly relying on a web framework without understanding its internal architecture is that it might not be the most efficient choice for a web application that has to deal with multiple concurrent connections. This paper provides an experimental comparison of the CPU utilization efficiency of two completely different concurrency-handling paradigms: a multi-process implementation in C and a goroutine-based non- preemptively scheduled web service in Go. The aim is to see if there is a performance penalty for handling concurrency in web applications primarily in kernel-space, rather than in user-space, as most modern web frameworks tend to do nowadays. |
---|---|---|
Email: | eduardo.rodriguez@tum.de | |
Status: | DONE | |
Supervisor: | Röhrl |
Files
Documentation
The implementation of the CLI instant messaging application written in C for this project can be found in this GitHub repository.
The results of the experiments comparing the performance of the backend in C and in Go, instructions on how to replicate the experiments and scripts to evaluate the measurements can be found in this subfolder of the GitHub repository.
All the software developed in this project is open-source and licensed under AGPLv3.