skynet源码分析之skynet_monitor
使用skynet框架中,偶尔会遇到A message from [ :0000000b ] to [ :0000000c ] maybe in an endless loop (version = 13187)类似的error,意思是0000000c服务处理0000000b服务发过来的某条消息时可能陷入死循环。 出现这种error的原因:业务层发生死循环或者比较耗时(超过5s)。 这就是skyent_monitor的作用。 1. skynet启动时会启动一个monitor线程,用来监测各个工作线程。5s循环一次,调用skynet_monitor_check()检测工作线程,稍后说明。 1 // skynet-src/skynet_start.c 2 static void * 3 thread_monitor( void * p) { 4 struct monitor * m = p; 5 int i; 6 int n = m-> count; 7 skynet_initthread(THREAD_MONITOR); 8 for (;;) { 9 CHECK_ABORT 10 for (i= 0 ;i<n;i++ ) { 11 skynet_monitor_check(m-> m[i]); 12 } 13 for (i= 0 ;i< 5 ;i++ ) { 14 CHECK