Efficient multithreaded server P&L: -7 (≃ -58 EUR)
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.
Idėja yra ta, kad kiekviena gija turi skambėjimo buferį, kai priimamas lizdas, į ringbuffer įdedamas pranešimas ir gija pradeda klausytis to vartotojo.
Visos kitos gijos yra informuojamos apie visus vartotojus, kad jie taip pat galėtų joms perduoti duomenis.
Tai efektyvu, nes gija gali aptarnauti tūkstančius milijonų jungčių ir yra keletas gijų.
Viena problema, kuri yra bendra kelių gijų problema, yra vienos iš kelių įvykių aptarnavimas iš vienos gijos. Aš pasitikiu tuo, kad apklausiu „ringbuffer“ ir „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.