struct skynet_config {
int thread;
int harbor;
int profile;
const char * daemon;
const char * module_path;
const char * bootstrap;
const char * logger;
const char * logservice;
};
struct skynet_env {
struct spinlock lock; --初始化
lua_State *L; – luaL_newState()
};
struct monitor {
int count; – start 函数启动传进的参数thread
struct skynet_monitor ** m; – thread* (skynet_monitor *)的数组
pthread_cond_t cond;
pthread_mutex_t mutex;
int sleep; --初始化为0
int quit;
};
每一个工作线程对应一个value
struct skynet_monitor {
int version;
int check_version;
uint32_t source;
uint32_t destination;
};
–工作线程的参数结构体
struct worker_parm {
struct monitor *m; --> 就是上面的monitor 的地址
int id; --0,1,…, thread个
int weight; --如果对应的i<8,则按-1,-1,-1,-1,0,0,0,0赋值,否则按0赋值
};
#define THREAD_WORKER 0
#define THREAD_MAIN 1
#define THREAD_SOCKET 2
#define THREAD_TIMER 3
#define THREAD_MONITOR 4
struct skynet_node {
int total;
int init;
uint32_t monitor_exit;
pthread_key_t handle_key; --> value对应上面的宏THREAD_WORKER 等
bool profile; // default is off
};
struct handle_storage {
struct rwlock lock;
uint32_t harbor;
uint32_t handle_index;–>默认值为1
int slot_size;—> 默认值为4
struct skynet_context ** slot; 4* skynet_context*
int name_cap;–>default 2
int name_count;–>default 0
struct handle_name name;–> 2 handle_name*
};
struct handle_name {
char * name;
uint32_t handle;
};
typedef int (*skynet_cb)(struct skynet_context * context, void *ud, int type, int session, uint32_t source , const void * msg, size_t sz);
struct skynet_context {
void * instance;
struct skynet_module * mod;
void * cb_ud;
skynet_cb cb;–>回调函数
struct message_queue *queue;
FILE * logfile;
uint64_t cpu_cost; // in microsec
uint64_t cpu_start; // in microsec
char result[32];
uint32_t handle;
int session_id;
int ref;
int message_count;
bool init;
bool endless;
bool profile;
CHECKCALLING_DECL
};