Efficient multithreaded server P&L: -7 (≃ -6063 RUB)
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.
Идея состоит в том, что каждый поток имеет кольцевой буфер, когда сокет принимается, сообщение помещается в кольцевой буфер, и поток начинает прослушивать этого пользователя.
Все остальные потоки уведомляются обо всех пользователях, поэтому они также могут отображать данные для них.
Это эффективно, поскольку поток может обслуживать тысячи миллионов соединений, а потоков несколько.
Одной из проблем, которая является общей для многопоточности, является обслуживание одного из нескольких видов событий из одного потока. Я полагаюсь на тот факт, что опрашиваю кольцевой буфер и 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.