mirror of
https://github.com/kamranahmedse/developer-roadmap.git
synced 2025-08-30 20:49:49 +02:00
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 syntax
This commit is contained in:
@@ -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)
|
Reference in New Issue
Block a user