Menu

SObjectizer FAQ

Yauheni Akhotnikau Boris Sivko Nicolai Grodzitski korish

What Is SObjectizer?

SObjectizer is a small framework which significantly simplifies the development of big and complex concurrent applications in C++, especially if event flow processing is required.

SObjectizer is an open-source project. It lives in SourceForge and has a mirror in GitHub.

Which License Is Used For SObjectizer?

SObjectizer is distributed under 3-clauses BSD license. It allows you to use SObjectizer in open-source and proprietary projects.

What Does The Name “SObjectizer” Mean?

There was a “SCADA Objectizer” project in the mid-1990's. SObjectizer is a consequence of that project. But since SObjectizer is not related to SCADA field anymore, the word “SCADA” was shortened to just one letter “S”.

How Does SObjectizer Simplify The Software Development?

Simplification comes from the usage of asynchronous interaction between agent objects. Development of multithreaded applications via async message passing is much more simple than the usage of low-level primitives like semaphores, critical sections/mutexes, condition variables and so on.

SObjectizer provides working contexts for event handling and takes care about deallocation of processed messages. The developer doesn't control thread manually and doesn't care about memory management at all.

It gives an opportunity to have tens, even hundreds working threads in an application. These threads handle billions of messages but the developer doesn't need to write thread starting and stopping code. Moreover, there is no need to call new/delete explicitly for message objects. As a result, it reduces the amount of errors, speeds up the development process and increases overall code reliability.

How Is SObjectizer Related To Actor Model?

Agents in SObjectizer are very similar to actors in Actor Model. Agents, like actors, are separate entities with their own state. They interact with each other via asynchronous messages. An actor state can be changed only during processing of the message received.

But SObjectizer is not only limited to Actor Model. The Publish-Subscribe model is also used actively. Due to this, for example, broadcast message sending is available in SObjectizer just “out of box”.

Since v.5.5.13 there is also support for CSP-like interaction between entities in an application. See [so-5.5 In-depth - Message chains] for more details.

Where Is/Was SObjectizer Used?

SObjectizer is the main tool for application development in JSC “Intervale”. Software components developed with the help of SObjectizer were implemented in mobile banking systems for several banks in the ex-USSR countries (e.g. Sberbank in Russia and Halyk-Bank in Kazakhstan), mobile commerce platforms for big mobile operators (MTS, MegaFon), the system for performing payments to mobile operators (one of the biggest banks in Russia), the system for SMS/USSD traffic aggregation with the ability to distribute hundreds of millions of messages (with connections to more than 30 mobile operators in ex-USSR and Eastern Europe).

Outside of JSC “Intervale” SObjectizer was implemented in simulation systems and for creation of testing environments to verify the controlling railway equipment software.

Which Platforms Does SObjectizer Support?

The compiler with C++11 support is required to build SObjectizer (Visual Studio 2013-2017, GNU 4.8-7.2, Clang 3.4-5.0 are used in development and testing).

SObjectizer is verified in 32 and 64-bit versions of Windows, Linux, FreeBSD 10 and MacOS.

Where Can SObjectizer Be Downloaded?

Source code is available in Svn-repository on SourceForge or from the mirror in GitHub.

Source code archives and binaries for Windows can be downloaded from Files section on SourceForge.

Is There Documentation/Examples For SObjectizer?

Yes. The main documentation is in Project’s Wiki on SourceForge (it includes introduction, detailed description of several examples from SObjectizer distribution and some articles with more information about SObjectizer).

In addition, there are series of presentations about SObjectizer and it's features.

Finally, there is a list of references to various articles and slides in Project’s Wiki.

Who Is Behind SObjectizer?

From 2002 to 2006 SObjectizer was an internal project of JSC “Intervale”. In 2006 SObjectizer became open-source under 3-clause BSD license. Since 2013 SObjectizer is an independent project.

Currently SObjectizer if being developed by stiffstream company.

Is There A Support For SObjectizer?

We strive to ensure the highest quality of SObjectizer. However, at times mistakes do happen. We react to all bug reports, but since SObjectizer is open and free, the response time to the problem can vary very widely: from a few hours to a week or two. If this does not suit you and you want to have a guaranteed response time to the problem in our product, then you can order a paid technical support service form stiffstream.

Are There Any Analogs Or Alternatives To SObjectizer?

There are several live and evolving projects:

How Is SObjectizer In Comparison With C++ Actor Framework?

The comparison of SObjectizer and CAF can be found in this article.

We Have Erlang. Do We Need SObjectizer?

There is no sense in this question. If Erlang can be used to solve some problem then there is no need in C++ and SObjectizer. But if Erlang is not the best solution and C++ is required, consider using SObjectizer to simplify the development process.

Does SObjectizer Support Development Of Distributed Applications?

No.

Some kind of support for distributed applications was in the old versions of SObjectizer. But then this support was eliminated because:

  • there are not enough resources for this task and it is better to use existing resources on message dispatching inside one process;
  • there are a lot of tools which can be used for various tasks. For example: MQTT or DDS for M2M/IIoT, AMQP for integration with enterprise buses, RESTful-interfaces and so on. The usage of existing tools is simpler than the development of another message delivery protocol for SObjectizer.

What About The Performance Of SObjectizer?

SObjectizer has sufficient performance.

This question has no sense without knowing the specific problem, specific hardware and software environment. On synthetic tests SObjectizer shows performance in the range from 1.5-2 millions of messages to 8-10 millions of messages per second on Core i7 with four cores. The specific benchmark result depends on: dispatcher type, number of agents, number of subscriptions, messages' size and so on…


Related

Wiki: Home
Wiki: so-5.5 In-depth - Message chains