安全研发启蒙课:合理使用协程优化YAK插件

Yaklang协程池优化与Fastjson并发发包示例,
本文介绍了如何在Yaklang中使用协程池实现并发操作,特别是在Fastjson插件中的发包过程优化,通过生产者-消费者模式简化协程使用。

安全研发启蒙课:合理使用协程优化YAK插件

引言

协程是一种轻量级的线程,可以在单个线程中实现并发执行。与线程不同的是,协程之间的切换成本非常低,可以在不阻塞线程的情况下实现高并发,非常适合用在漏洞扫描等需要高并发的场景。

Yaklang支持通过go关键字创建协程,与go类似。但是对于没学过golang的同学来说还是有上手难度的,所以本篇文章就介绍下如何简化在一些基础场景下协程的使用。

协程池

类比线程池我们可以使用Yaklang写一个简单的协程池,我们使用生产者-消费者模式来实现。
一般在YAK插件中发包场景对并发有需求,由于只有发包过程是网络IO,所以我们使用一个生产者对应多个消费者,如下:

代码如下

NewThreadPool = func(size){
    inputChan = make(chan var)
    var consumer
    wg = sync.NewWaitGroup()
    threadPool = {
        "consumer":f =>{
            consumer = (id,data)=>{
                try {
                    f(id, data)
                } catch err {
                    log.warn(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值