Main  /  Edit version 5  /  Edit version 6  /   /  Users Area

Difference "Event Loop" ver. 5 versus ver. 6

Content:

## Event Loop and Thread Pool interaction
The CppCMS service has a simple design of a single event
loop, and a thread pool that handles actual user
application responses.
Every new incoming FastCGI, SCGI or HTTP request
is accepted by the CppCMS service and handled
by the fast and efficient CppCMS event loop that is
based on `epoll`, `kqueue`, `/dev/poll` or `select`
system calls.
On an incoming request, a special HTTP Context is created.
It prepares the incoming request, reads all POST data and
if required parses it within the central event loop.
Once the request is ready, it is checked against the
CppCMS applications pool to detect which
application object handles it.
If the application that handles it is a synchronous
application, its execution is passed to the
_thread pool_. The user application prepares the response
and sends it synchronously to the client and the context
is destroyed, completing the "request/response" cycle.
If the application is asynchronous, the HTTP Context
remains inside the event loop's thread and it is handled by
the asynchronous application. This application
may decide to complete the response immediately
or postpone it by implementing, for example, long polling.
## Integration with CppCMS Event Loop
There are several ways to interact with the event loop,
besides the obvious - implementing your own asynchronous
application:
1. Use the `cppcms::service::get_io_service()` function
to access the event loop directly.
You can use any of the [`booster::aio`](/cppcms_ref_v0_99/namespacebooster_1_1aio.html) classes there
and handle various asynchronous events.
2. You can post various operations for execution
in the event loop using `cppcms::service::post()`
from other threads.
This is especially important when you want to
do integration between synchronous and asynchronous
applications.
You should remember that most of the CppCMS objects
including `http::context` are not thread safe
for access from multiple threads, so
if some operation should be executed on
objects running in the event loop, it must
be done by posting handlers for execution
in the event loop.
It is important to remember that
every operation executed in the event
loop should be _very fast_ and _never block_.
## Event Loop and Thread Pool interaction
The CppCMS service has a simple design of a single event
loop, and a thread pool that handles actual user
application responses.
Every new incoming FastCGI, SCGI or HTTP request
is accepted by the CppCMS service and handled
by the fast and efficient CppCMS event loop that is
based on `epoll`, `kqueue`, `/dev/poll` or `select`
system calls.
On an incoming request, a special HTTP Context is created.
It prepares the incoming request, reads all POST data and
if required parses it within the central event loop.
Once the request is ready, it is checked against the
CppCMS applications pool to detect which
application object handles it.
If the application that handles it is a synchronous
application, its execution is passed to the
_thread pool_. The user application prepares the response
and sends it synchronously to the client and the context
is destroyed, completing the "request/response" cycle.
If the application is asynchronous, the HTTP Context
remains inside the event loop's thread and it is handled by
the asynchronous application. This application
may decide to complete the response immediately
or postpone it by implementing, for example, long polling.
## Integration with CppCMS Event Loop
There are several ways to interact with the event loop,
besides the obvious - implementing your own asynchronous
application:
1. Use the `cppcms::service::get_io_service()` function
to access the event loop directly.
You can use any of the [`booster::aio`](/cppcms_ref_v0_99/namespacebooster_1_1aio.html) classes there
and handle various asynchronous events.
2. You can post various operations for execution
in the event loop using `cppcms::service::post()`
from other threads.
This is especially important when you want to
do integration between synchronous and asynchronous
applications.
You should remember that most of the CppCMS objects
including `http::context` are not thread safe
for access from multiple threads, so
if some operation should be executed on
objects running in the event loop, it must
be done by posting handlers for execution
in the event loop.
It is important to remember that
every operation executed in the event
loop should be _very fast_ and _never block_.

Sidebar:

## Related
- [Understanding Application Lifetime](/wikipp/en/page/cppcms_1x_application_lifetime)
- [Thread Safety](/wikipp/en/page/thread_safety)
## Related
- [Understanding Application Lifetime](/wikipp/en/page/cppcms_1x_application_lifetime)
- [Thread Safety](/wikipp/en/page/thread_safety)
← [CppCMS 1.x.x Configuration](http://cppcms.com/wikipp/en/page/cppcms_1x_config)
[Understanding Application Lifetime](http://cppcms.com/wikipp/en/page/cppcms_1x_application_lifetime)→

About

CppCMS is a web development framework for performance demanding applications.

Support This Project

SourceForge.net Logo

Поддержать проект

CppCMS needs You


Navigation

Main Page


Valid CSS | Valid XHTML 1.0