state thread协程库解析

一、数据结构文件common.h解析

1、_st_clist循环队列

//循环队列定义
typedef struct _st_clist {
  struct _st_clist *next;
  struct _st_clist *prev;
} _st_clist_t;

包含该队列的对象,后续都可以根据该队列在对象中的偏移位置来计算对象的地址。

2、_st_stack栈

typedef struct _st_stack {
  _st_clist_t links;
  char *vaddr;                /* Base of stack's allocated memory */
  int  vaddr_size;            /* Size of stack's allocated memory */
  int  stk_size;              /* Size of usable portion of the stack */
  char *stk_bottom;           /* Lowest address of stack's usable portion */
  char *stk_top;              /* Highest address of stack's usable portion */
  void *sp;                   /* Stack pointer from C's point of view */
#ifdef __ia64__
  void *bsp;                  /* Register stack backing store pointer */
#endif
} _st_stack_t;

sp是C分配出来的指针的起始地址,其他成员值都是基于此地址的。

3、_st_cond条件

typedef struct _st_cond {
  _st_clist_t wait_q;	      /* Condition variable wait queue */
} _st_cond_t;

条件变量等待队列

4、_st_thread协程

struct _st_thread {
  int state;                  /* Thread's state */
  int flags;                  /* Thread's flags */

  void *(*start)(void *arg);  /* The start function of the thread */
  void *arg;                  /* Argument of the start function */
  void *retval;               /* Return value of the start function */

  _st_stack_t *stack;	      /* Info about thread's stack */

  _st_clist_t links;          /* For putting on run/sleep/zombie queue */
  _st_clist_t wait_links;     /* For putting on mutex/condvar wait queue */
#ifdef DEBUG
  _st_clist_t tlink;          /* For putting on thread queue */
#endif

  st_utime_t due;             /* Wakeup time when thread is sleeping */
  _st_thread_t *left;         /* For putting in timeout heap */
  _st_thread_t *right;	      /* -- see docs/timeout_heap.txt for details */
  int heap_index;

  void **private_data;        /* Per thread private data */

  _st_cond_t *term;           /* Termination condition variable for join */

  jmp_buf context;            /* Thread's context */
};

5、_st_mutex互斥量

typedef struct _st_mutex {
  _st_thread_t *owner;        /* Current mutex owner */
  _st_clist_t  wait_q;        /* Mutex wait queue */
} _st_mutex_t;

6、_st_pollq  poll对象

typedef struct _st_pollq {
  _st_clist_t links;          /* For putting on io queue */
  _st_thread_t  *thread;      /* Polling thread */
  struct pollfd *pds;         /* Array of poll descriptors */
  int npds;                   /* Length of the array */
  int on_ioq;                 /* Is it on ioq? */
} _st_pollq_t;

7、_st_eventsys_ops网络事件

typedef struct _st_eventsys_ops {
  const char *name;                          /* Name of this event system */
  int  val;                                  /* Type of this event system */
  int  (*init)(void);                        /* Initialization */
  void (*dispatch)(void);                    /* Dispatch function */
  int  (*pollset_add)(struct pollfd *, int); /* Add descriptor set */
  void (*pollset_del)(struct pollfd *, int); /* Delete descriptor set */
  int  (*fd_new)(int);                       /* New descriptor allocated */
  int  (*fd_close)(int);                     /* Descriptor closed */
  int  (*fd_getlimit)(void);                 /* Descriptor hard limit */
} _st_eventsys_t;

网络事件接口封装

8、_st_vp虚拟进程

typedef struct _st_vp {
  _st_thread_t *idle_thread;  /* Idle thread for this vp */
  st_utime_t last_clock;      /* The last time we went into vp_check_clock() */

  _st_clist_t run_q;          /* run queue for this vp */
  _st_clist_t io_q;           /* io queue for this vp */
  _st_clist_t zombie_q;       /* zombie queue for this vp */
#ifdef DEBUG
  _st_clist_t thread_q;       /* all threads of this vp */
#endif
  int pagesize;

  _st_thread_t *sleep_q;      /* sleep queue for this vp */
  int sleepq_size;	      /* number of threads on sleep queue */

#ifdef ST_SWITCH_CB
  st_switch_cb_t switch_out_cb;	/* called when a thread is switched out */
  st_switch_cb_t switch_in_cb;	/* called when a thread is switched in */
#endif
} _st_vp_t;

全局虚拟进程

9、_st_netfd网络句柄

typedef struct _st_netfd {
  int osfd;                   /* Underlying OS file descriptor */
  int inuse;                  /* In-use flag */
  void *private_data;         /* Per descriptor private data */
  _st_destructor_t destructor; /* Private data destructor function */
  void *aux_data;             /* Auxiliary data for internal use */
  struct _st_netfd *next;     /* For putting on the free list */
} _st_netfd_t;

网络句柄列表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值