Как многопоточная базовая структура (nodejs,asio) передает данные на уровень приложения?

Я делаю демо по iocp для простой игры-SVR

Class Game{
    map<string, Table*> all_tables;//tableid-table map
    void dispatch(Client *c)  //dispatch client command
    {
        Table *t = all_tables[c->player->roomid];
        t->execute(c->packet.cmd, c->packet.data); 
}

Class Table{
    ```//members such as map<uid,Player*> all_players, game_state, table_id``

    ```//handler such as handler_login(Player*, String &msg),                                                                                 
         handler_attack(Player*, String &msg)```

    execute(int cmd, Player *p, String &msg);// switch(cmd) case LOGIN:                                 
                                                     handler_login(```)

} 

main()
{
    ```//init open a completion port, a worker thread with this port
    while(1)  
    {  worker_socket = accept(``);  //block accept
        ```; 
       WSARecv(worker_socket, ```, workerIoData->overlapped);
    }
}

workerthread(```)
{
    ```//init
    while(true){
       ret = GetQueuedCompletionStatus(```);
       socket = xxHandlerData->socket
       game->dispatch(socket_client_map[socket], data)
    }
}

iocp прочитал (I/O) свой aio по своему внутреннему многопоточности (wsa-api + GetQueuedCompletionStatus), может ли эта программа улучшиться с помощью открытого многопользовательского потока (чтения)?

И я слышал, что Nodejs также выполняет ввод / вывод в многопоточном режиме, выполняет логику js-кода в однопоточном режиме. Мне действительно интересно, как многопоточный поток передает данные завершения в один поток. Где я могу найти простую и понятную статью о реализации "multi-io + single work thread" (или статью о внутренней реализации iocp?)

0 ответов

Другие вопросы по тегам