Siege的线程模型-基于版本2.56
2019獨角獸企業重金招聘Python工程師標準>>>
本節主要講解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
?
轉載于:https://my.oschina.net/qiangzigege/blog/224217
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Siege的线程模型-基于版本2.56的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度网盘不限速下载神器献给你
- 下一篇: 数据仓库之电商数仓-- 4、可视化报表S