siege工具源码解析

原理

程序流程图[1]

如果并发用户数为n,那么就会相应创建n个压测线程,每个线程模拟一个用户。除了压测线程之外,主函数会额外生成2个线程,我们暂且称之为计时线程和控制线程。计时线程用于等待一开始我们设定的压测时间,到时间后通过线程信号通知控制线程。随后控制线程通过改变与压测线程共享的压测停止标志位,并发送终止信号来实现压测线程的停止。每个压测线程都会从结构体CREW中读取压测任务,这些压测任务由主函数添加。每个线程的测试数据均会输出到client结构体数组中,最后由主函数统一收集结果,并打印在屏幕上。

这一过程当中涉及的线程操作有条件变量,用于等待CREW中有压测任务到来,另外在计时线程中也用到了条件变量进行计时操作;互斥锁,用于改变CREW结构体成员的值时加锁保护数据;线程信号,用于线程间的相互通知;信号屏蔽字,用于将到来的异步信号用同步的方法去处理。《UNIX环境高级编程》。

源码分析参照一下两篇文章。

[1]Siege——多线程编程最佳实例

[2]siege工具源码解析

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,806评论 1 32
  • 帝都不会艳慕琼崖的天气,在逃犯 不会遭受法律的制裁,地上的碗 不会因为支离破碎的躯体, 而放声哭泣 贪玩的幼鸟不会...
    素挲阅读 1,274评论 0 1
  • 要点 生活中的10%是由发生在你身上的事情组成,而另外的90%则是由你对所发生事情如何反应决定的。 你控制不了前面...
    邢衍贞阅读 1,800评论 0 0
  • 奶奶想你了,今晚又失眠了。展转反侧,难以入眠,反反复复回想着陪你玩耍的情景,宝贝,奶奶好想你,真的好想你!
    寒江雪810阅读 760评论 0 0
  • 手动选择数据进行展示即允许用户在页面上通过选项卡,下拉菜单,单选框,文本框等选择目标对象,并且将该目标对象所对应的...
    俊爷拒做学渣阅读 4,685评论 1 2