$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Matt Pulver (mpulver_at_[hidden])
Date: 2023-09-06 14:54:32
On Tue, Sep 5, 2023 at 12:43â¯PM Ruben Perez via Boost <boost_at_[hidden]>
wrote:
> I'm Ruben, the author of Boost.MySQL, and I want to present (and maybe get
> some feedback about) a project I'm developing to showcase how to do async
> stuff with Boost server-side.
...
So I've decided to [...] create a project that
> allows Boost authors to try new things in a realistic environment, while
> demonstrating to users how they can use Boost to build an app.
>
Very nice. From https://github.com/anarthal/servertech-chat/#architecture
in describing the example app:
The server is based on Boost.Beast, asynchronous (it uses stackful
> coroutines) and single-threaded.
This is a good/appropriate introduction for programmers to experience
developing what has the power of an asynchronous application but with the
simplicity of a single-threaded application without the need for locks.
A more advanced app, and what I would like to see personally, is an example
and architectural discussion on design patterns involving how best to
handle server requests that require more time/resources that may not be
appropriate for a single-threaded server (e.g. a database server.) From a
high-level perspective, my current thinking on this is:
- Handle fast requests in the main single-threaded boost.asio event loop
(assuming they don't access resources locked by the next bullet point.)
- Handle longer requests by delegating to a separate thread pool that
triggers a callback when done, without blocking the single-threaded event
loop. The threads in the separate thread pool do "traditional locking" via
mutexes, read/write locks, etc.
Are there more modern approaches/techniques?
In either case, a discussion about these issues would be valuable IMHO
after the introductory example.
Thank you,
Matt