Add missing content in game developer roadmap (#8408)
* Update semaphore@DYvzGc_r0SlOArPPc1gNI.md * Improve epoll content with many resource. * Improve epoll content with many resource. * Improve select content with many resource. * Improve wsa-poll content with link resource. * Improve iocp content with link resource. * Improve io_uring content with link resource. * update the title of resource section * Improve registered-io content with link resource. * Improve kqueue content with resources * update content syntaxpull/8414/head
parent
85202507e6
commit
858f131222
8 changed files with 110 additions and 0 deletions
@ -0,0 +1,14 @@ |
|||||||
|
# epoll |
||||||
|
|
||||||
|
**epoll** is a high-performance I/O event notification system in Linux, essential for handling |
||||||
|
large-scale asynchronous network operations in server-side game development. Unlike `select` |
||||||
|
or `poll`, it uses an event-driven model, reducing CPU overhead and improving scalability. |
||||||
|
Game servers leverage `epoll` to efficiently manage thousands of concurrent connections, |
||||||
|
responding only when events occur, minimizing system calls, and optimizing resource |
||||||
|
usage—making it ideal for multiplayer games and real-time applications. |
||||||
|
|
||||||
|
Visit the following resources to learn more: |
||||||
|
|
||||||
|
- [@documentation@Linux epoll API](https://man7.org/linux/man-pages/man7/epoll.7.html) |
||||||
|
- [@article@Understanding epoll for Scalable Network Servers](https://medium.com/@copyconstruct/the-method-to-epolls-madness-d9d2d6378642) |
||||||
|
- [@article@epoll vs select vs poll](https://devarea.com/linux-io-multiplexing-select-vs-poll-vs-epoll/) |
@ -0,0 +1,14 @@ |
|||||||
|
# io_uring |
||||||
|
|
||||||
|
**io_uring** is a modern asynchronous I/O framework introduced in Linux 5.1, designed to |
||||||
|
provide high-performance, low-latency I/O operations. It is widely used in server-side game |
||||||
|
development to efficiently handle network and disk operations, making it ideal for real-time |
||||||
|
multiplayer games. Unlike `epoll` or traditional polling mechanisms, `io_uring` minimizes |
||||||
|
system calls by using a shared memory ring buffer between the kernel and user space, reducing |
||||||
|
context switching overhead. This results in improved scalability and responsiveness, allowing |
||||||
|
game servers to handle thousands of concurrent connections with minimal CPU usage. |
||||||
|
|
||||||
|
Visit the following resources to learn more: |
||||||
|
|
||||||
|
- [@documentation@Linux io_uring_enter](https://man7.org/linux/man-pages/man2/io_uring_enter.2.html) |
||||||
|
- [@article@Efficient Networking with io_uring](https://lwn.net/Articles/776703/) |
@ -0,0 +1,14 @@ |
|||||||
|
# IOCP (I/O Completion Ports) |
||||||
|
|
||||||
|
**I/O Completion Ports (IOCP)** is a high-performance asynchronous I/O mechanism in Windows, |
||||||
|
designed to efficiently handle large numbers of concurrent network connections. It is widely |
||||||
|
used in server-side game development to optimize networking performance, making it ideal for |
||||||
|
MMORPGs and real-time multiplayer games. Unlike `select` or `WSA-Poll`, IOCP uses a thread |
||||||
|
pool and a queue-based event system to process completed I/O operations asynchronously, |
||||||
|
minimizing CPU overhead and improving scalability. By leveraging IOCP, game servers can |
||||||
|
efficiently handle thousands of connections with minimal latency, making it the preferred |
||||||
|
choice for high-performance Windows-based game networking. |
||||||
|
|
||||||
|
Visit the following resources to learn more: |
||||||
|
|
||||||
|
- [@documentation@Microsoft IOCP Documentation](https://learn.microsoft.com/en-us/windows/win32/fileio/i-o-completion-ports) |
@ -0,0 +1,14 @@ |
|||||||
|
# kqueue |
||||||
|
|
||||||
|
**kqueue** is an efficient event notification system available on BSD-based operating systems, |
||||||
|
including macOS and FreeBSD. It is designed to handle large numbers of concurrent connections |
||||||
|
with minimal CPU overhead, making it well-suited for server-side game development. Similar |
||||||
|
to `epoll` on Linux, `kqueue` operates in an event-driven manner, allowing game servers to |
||||||
|
efficiently manage network events, timers, and file system changes. By reducing unnecessary |
||||||
|
polling and system calls, `kqueue` helps improve the scalability and responsiveness of |
||||||
|
multiplayer game servers, ensuring low-latency interactions and optimized resource usage. |
||||||
|
|
||||||
|
Visit the following resources to learn more: |
||||||
|
|
||||||
|
- [@documentation@FreeBSD kqueue Documentation](https://man.freebsd.org/cgi/man.cgi?query=kqueue) |
||||||
|
- [@documentation@macOS kqueue API Reference](https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man2/kqueue.2.html) |
@ -0,0 +1,15 @@ |
|||||||
|
# Registered I/O |
||||||
|
|
||||||
|
**Registered I/O** is an optimization technique that enhances the performance of asynchronous |
||||||
|
I/O operations by pre-registering resources such as file descriptors, memory buffers, or |
||||||
|
network sockets with the operating system. This reduces the overhead of repeated system calls |
||||||
|
and resource management, making it highly beneficial for server-side game development, where |
||||||
|
low-latency and high-throughput are critical. Technologies like `io_uring` and Windows |
||||||
|
`RIO (Registered I/O)` API leverage this approach to minimize kernel interactions, improving |
||||||
|
efficiency for handling large-scale multiplayer game servers. By reducing context switching |
||||||
|
and memory allocation overhead, Registered I/O helps game servers achieve smoother performance |
||||||
|
and lower latency. |
||||||
|
|
||||||
|
Visit the following resources to learn more: |
||||||
|
|
||||||
|
- [@documentation@Microsoft Registered I/O (RIO)](https://learn.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/hh997032(v=ws.11)) |
@ -0,0 +1,14 @@ |
|||||||
|
# select |
||||||
|
|
||||||
|
**select** is a multiplexing system call in Linux used for monitoring multiple file descriptors |
||||||
|
to check if they are ready for I/O operations. It is commonly used in server-side game |
||||||
|
development for handling multiple connections asynchronously. However, `select` has |
||||||
|
limitations, as it scans all file descriptors linearly, making it inefficient for handling |
||||||
|
a large number of concurrent connections. Despite its drawbacks, it remains useful for |
||||||
|
simpler applications or legacy systems. Modern alternatives like `epoll` or `kqueue` offer |
||||||
|
better performance and scalability. |
||||||
|
|
||||||
|
Visit the following resources to learn more: |
||||||
|
|
||||||
|
- [@documentation@Linux select API](https://man7.org/linux/man-pages/man2/select.2.html) |
||||||
|
- [@article@select vs epoll vs poll](https://devarea.com/linux-io-multiplexing-select-vs-poll-vs-epoll/) |
@ -0,0 +1,12 @@ |
|||||||
|
# Semaphores |
||||||
|
|
||||||
|
**Semaphores** are crucial synchronization mechanisms in server-side game development, ensuring controlled access to shared resources and |
||||||
|
preventing race conditions. They are widely used for managing concurrent processes, such as limiting the number of active players in a |
||||||
|
session, regulating access to database connections, and synchronizing threads in physics or AI computations. By using semaphores, |
||||||
|
developers can optimize performance by preventing resource starvation and contention. Implementing them correctly requires careful |
||||||
|
handling to avoid deadlocks and ensure efficient thread scheduling. Commonly used in conjunction with mutexes and condition variables, |
||||||
|
semaphores help maintain stability in high-performance multiplayer environments. |
||||||
|
|
||||||
|
Visit the following resources to learn more: |
||||||
|
|
||||||
|
- [@article@Semaphores in Process Synchronization](https://www.geeksforgeeks.org/semaphores-in-process-synchronization/) |
@ -0,0 +1,13 @@ |
|||||||
|
# WSA-Poll |
||||||
|
|
||||||
|
**WSA-Poll** is a Windows-specific alternative to `poll`, used for monitoring multiple sockets |
||||||
|
for readiness in non-blocking network applications. It is commonly utilized in server-side |
||||||
|
game development to handle multiple client connections efficiently. Unlike `select`, `WSA-Poll` |
||||||
|
eliminates the limitation of FD_SETSIZE, allowing it to scale better for a larger number of |
||||||
|
connections. However, it is generally less efficient than `epoll` on Linux due to its linear |
||||||
|
scanning mechanism. For high-performance game servers on Windows, IOCP (I/O Completion Ports) |
||||||
|
is often preferred over `WSA-Poll`. |
||||||
|
|
||||||
|
Visit the following resources to learn more: |
||||||
|
|
||||||
|
- [@documentation@Microsoft WSA-Poll Documentation](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsapoll) |
Loading…
Reference in new issue