Efficient multithreaded server P&L: -7 (≃ -62 USD)
I have some epoll server code that I tweaked to run the server in a thread.
Now I'm taking this code and changing it so that each client connection is multiplexed by multiple threads.
各スレッドにはリングバッファがあり、ソケットが受け入れられるとメッセージがリングバッファに置かれ、スレッドはそのユーザーのリッスンを開始します。
他のすべてのスレッドにはすべてのユーザーが通知されるため、データをエコーすることもできます。
スレッドは数千万の接続に対応でき、複数のスレッドがあるため、これは効率的です。
マルチスレッドの一般的な問題の 1 つは、1 つのスレッドから複数の種類のイベントの 1 つを処理することです。私はリングバッファと epoll をポーリングしているという事実に依存しています。
The idea is that each thread has a ringbuffer, when a socket is accepted, a message is put on the ringbuffer and the thread begins listening to that user.
All the other threads are notified of all the users so they can also echo data to them.
This is efficient as a thread can serve thousands-millions of connections and there are multiple threads.
One problem, which is a generic problem for multithreading is servicing one of multiple kinds of events from one thread. I rely on the fact I am polling a ringbuffer and epoll.