Siege的线程模型-基于版本2.56

本节主要讲解siege的线程模型,具体的http请求交互在上一篇文章中讲过了。

main函数中可能会产生以下线程

1->sig_handler线程

2->siege_timer线程

3-》spin_doctor线程

4-》client工作线程

注意:启动工作线程的代码是

 result = pthread_create( &(peer[x]), &scope_attr, (void*)client, &(data[x]) );

而对于scope_attr,之前有这样的语句:

pthread_attr_init( &scope_attr )
pthread_attr_setscope( &scope_attr, PTHREAD_SCOPE_SYSTEM );

重点在于PTHREAD_SCOPE_SYSTEM

百度搜了下,这个字段是为了:

绑定状况下,则顾名思义,即某个线程固定的"绑"在一个轻进程之上。被绑定的线程具有较高的响应速度,这是因为CPU时间片的调度是面向轻进程的,绑定的线程可以保证在需要的时候它总有一个轻进程可用。通过设置被绑定的轻进程的优先级和调度级可以使得绑定的线程满足诸如实时反应之类的要求。

作用是为了让线程获得更高的响应速度。

 ~~~~~~~~~~~

在client线程中,有这么2行代码:

pthread_setcanceltype ( PTHREAD_CANCEL_ASYNCHRONOUS, &type );
pthread_setcancelstate( PTHREAD_CANCEL_ENABLE, &state ); 

第一个是立即取消,实际上等到被调度后立即取消。

第二个是设置可以取消其运行。

这样的话,别的线程发送停止信号后,接收方线程会被取消执行。

 

 下面分析下sig_handler线程。

sigemptyset(&sigs);
  sigaddset(&sigs, SIGHUP);
  sigaddset(&sigs, SIGINT);
  sigaddset(&sigs, SIGTERM);
  sigprocmask(SIG_BLOCK, &sigs, NULL);

然后执行sigwait(&sigs, &gotsig);等待信号事件的发生。

然后又启动了spin_doctor线程。

这个线程主要是输出一些字符。

至于siege_timer,则是为了等待超时事件的发生,这个线程是否会启动,

取决于是否配置了time参数,可以在启动时指定-t参数,

线程内的核心语句是:

pthread_cond_timedwait

~~~~~~~~~~~~

更多的线程编程知识,可以百度或者看书

下面的博文讲得也不错:

http://blog.csdn.net/qq276592716/article/details/7325250

 

你可能感兴趣的:(siege,2.56)