Как многопоточная базовая структура (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?)