static void * _socket(void *p) { struct monitor * m = p; for (;;) { int r = skynet_socket_poll(); if (r==0) break; if (r<0) { CHECK_ABORT continue; } wakeup(m,0); }
static void * _socket(void *p) { struct monitor * m = p; for (;;) { int r = skynet_socket_poll(); if (r==0) break; if (r<0) continue; wakeup(m,0); } return NULL; }
static void * thread_socket(void *p) { struct monitor * m = p; skynet_initthread(THREAD_SOCKET); for (;;) { int r = skynet_socket_poll(); if (r==0) break; if (r<0) { CHECK_ABORT continue; } wakeup(m,0); }
static void * thread_socket(void *p) { struct monitor * m = p; skynet_initthread(THREAD_SOCKET); for (;;) { int r = skynet_socket_poll(); if (r==0) break; if (r<0) { CHECK_ABORT continue; } wakeup(m,0); // 网络 IO 消息在 skynet 的设计里是 2 等公民. 而且一个网络消息通常只需要一个 worker 去处理就够了 }
// IO线程 static void _socket(void *p) { monitor *m = (monitor *)p; SNServer::Get()->ThreadInit(THREAD_SOCKET); for (;;) { CHECK_ABORT; int r = skynet_socket_poll(); if (r == 0) break; if (r < 0) { continue; } wakeup(m, 0); } }
static void * thread_socket(void *p) { struct monitor * m = p; // set socket thread's specific data to THREAD_SOCKET skynet_initthread(THREAD_SOCKET); // continue to poll socket and signal worker thread to process for (;;) { int r = skynet_socket_poll(); if (r==0) break; if (r<0) { CHECK_ABORT continue; } wakeup(m,0); }
static void *thread_socket(void *p) { struct monitor *m = p; skynet_initthread(THREAD_SOCKET); for(;;) { int r = skynet_socket_poll(); if(r == 0) break; if(r < 0) { CHECK_ABORT continue; } // 有socket消息返回 wakeup(m, 0); // 全部线程都睡眠的情况下才唤醒一个工作线程(即只要有工作线程处于工作状态,则不需要唤醒) }