3. High performance server
Thread Pool that uses multi-core to the maximum
- It processes various events occurring simultaneously in parallel using thread pool.
- Thread Pool is divided into two uses; for internal networks and user callback, which can prevent network bottlenecks created by user mistakes.
- If you want, one thread pool can be used commonly or thread pool will not be used at all; flexible customizing is possible.
Use efficient I/O strategy
- I/O operation, which is much slower compared to internal calculation, must be performed more carefully and smartly.
- When performing multicasting, sometimes it is better to do routing using P2P information without the server performs transmission individually. In case of messaging, this feature can be selected for use.
- Data such as the location information of a gamer is valid only for the latest value. If the latest data and previous data exist in the Send Queue, it is advantageous to ignore the previous data and send the latest data. If the Unique ID feature of ProudNet is activated during messaging, it performs on its own internally by recognizing it.
Other various efforts
- Minimum kernel-user mode Conversion
In a server OS, kernel-user mode conversion is needed for handling TCP and UDP packets. This is a high cost process and causes a negative effect in server performance. ProudNet makes a conscious effort in minimizing this to maximize performance.
- Selective Thread Pool Modes
Prolonged game logic routine might cause connection issues for clients. It is highly likely that this could be a game logic design problem. To prevent this from happening, ProudNet can run user routines and network I/O routines in a different thread pool.
- Freedom in Thread Pool Relationship Formation
In a distributed server environment, it is hard to design a server so that thread pool and server instance has a one-to-many relationship. If this is not guaranteed, kernel time could potentially be excessively high and reduce server performance. ProudNet gives option to developers to choose the relationship freely to suit different situations in minimizing kernel time and yield highest performance possible.