go语言中如何模拟100个IP同时并发访问服务器,每个ip要重复访问1000次。每个Ip一分钟之内只能访问一次
package main import (
"time"
"sync"
"fmt"
"sync/atomic"
) type Ban struct {
visitIPs map[string]struct{} //这个是什么意思
} func NewBan() *Ban{
return &Ban{visitIPs:make(map[string]struct{})}
}
//判断ip是否存在
func (o *Ban) visit(ip string)bool{
mapMutex.Lock()
defer mapMutex.Unlock()
if _, ok :=o.visitIPs[ip];ok{
return true
}
o.visitIPs[ip]= struct{}{}
go o.invalidAfter1Min(ip)
return false
}
func (o *Ban) invalidAfter1Min(ip string){
time.Sleep(time.Minute *1)
mapMutex.Lock()
visitIPs :=o.visitIPs
delete(visitIPs,ip)
o.visitIPs=visitIPs
mapMutex.Unlock()
}
var mapMutex *sync.Mutex //声明锁 func main(){
mapMutex =new(sync.Mutex) //创建一个锁
var success int64 //声明
ban :=NewBan()
wg :=new(sync.WaitGroup)
for i :=0;i<1000;i++{
for j :=0;j<1000;j++{
wg.Add(1)
//fmt.Println('j',j)
fmt.Println(j)
ipEnd :=j
go func() {
defer wg.Done()
ip :=fmt.Sprintf("192.168.1.%d",ipEnd)
//fmt.Println(ipEnd)
if !ban.visit(ip){
atomic.AddInt64(&success,1)
}
}()
}
}
wg.Wait()
fmt.Println("success:",success) }
go语言中如何模拟100个IP同时并发访问服务器,每个ip要重复访问1000次。每个Ip一分钟之内只能访问一次的更多相关文章
- Go语言中的并发编程
并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很重要的原因. Go语言中的并发编程 并发与并行 并发:同一时间段内执行多个任务(你在用微信和两个女朋友聊天) ...
- 【Golang详解】go语言中并发安全和锁
go语言中并发安全和锁 首先可以先看看这篇文章,对锁有些了解 [锁]详解区分 互斥锁.⾃旋锁.读写锁.乐观锁.悲观锁 Mutex-互斥锁 Mutex 的实现主要借助了 CAS 指令 + 自旋 + 信号 ...
- (待续)C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)
目录 00 简介 01 算法概述 02 公用方法与变量解释 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存 ...
- C语言中的宏定义
目录(?)[-] 简单宏定义 带参数的宏 运算符 运算符 宏的通用属性 宏定义中圆括号 创建较长的宏 较长的宏中的逗号运算符 宏定义中的do-while循环do 空操作的定义 预定义宏 C语言中常用的 ...
- Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器
Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型 ...
- C语言中的异常处理机制
#define try if(!setjmp(Jump_Buffer)) 返回try现场后重新执行判断,所以有两次执行. http://blog.csdn.net/tian_dao_chou_qin/ ...
- C语言中的指针(一)
指针也是一种数据类型,占用内存空间,内存中存储的只能是变量的地址. *p是操作内存的意思,在声明成为指针变量的时候使用*,在使用指针的时候,*表示操作内存. *p放在等号的左边,相当于是从内存中取值, ...
- python语言中的编码问题
在编程的过程当中,常常会遇到莫名其妙的乱码问题.很多人选择出了问题直接在网上找答案,把别人的例子照搬过来,这是快速解决问题的一个好办法.然而,作为一个严谨求实的开发者,如果不从源头上彻底理解乱码产生的 ...
- C语言中内存分配那些事儿
C程序的内存结构 C语言的之所以复杂,首先它的内存模型功不可没.不像某些那样的高级语言只需要在使用对象的时候,用new创建.所有之后的事情,你不需要操心.对于C语言,所有与内存相关的东西,都需要熟悉, ...
随机推荐
- SpringBoot简介
Spring Boot,简单讲就是牺牲项目的自由度来减少配置的复杂度(“契约式编程”思想,SpringBoot自动配置方案的指导思想).约定一套规则,把这些框架都自动配置集成好,从而达到“开箱即用”. ...
- JavaSE-基础语法(四)-javaSE进阶
javaSE进阶 三.异常 四.多线程 五.Lambda表达式 六.IO流 七.网络编程 八.新特性 13.异常体系14.异常分类15.声明抛出捕获异常16.自定义异常17.线程概念18.线程同步19 ...
- JS基础(三)构造函数
JS中的构造函数 <script language="JavaScript"> window.onload = function(){ function Bottle( ...
- Flask 系列之 Bootstrap-Flask
说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环境管理器:virtualenv 代码编辑器:VS Code 实验目标 通过使用 Bootstrap-Flask 来进行页面美化 ...
- 07-HTML-内嵌标签
<html> <head> <title>内嵌标签学习</title> <meta charset="utf-8"/> ...
- angular input 为file on-change 无效
l转自:https://blog.csdn.net/klo220/article/details/53331229 侵删 出现这个问题是因为input的type是file,这时如果用ng-change ...
- Visual Studio 20周年,我和VS不得不说的故事
Visual Studio 2017正式版已如期发布(点击这里查看发布全记录)!自去年 11 月正式宣布 Visual Studio 项目之后,微软终于正式推出了“宇宙最强集成开发环境(IDE)”的最 ...
- winsock 编程(简单客户&服务端通信实现)
winsock 编程(简单客户&服务端通信实现) 双向通信:Client send message to Server, and if Server receive the message, ...
- (网页)thinkpad 笔记本开机看看坏了没?
嗯!只是想看一下是不是块砖头. 出现许多细节问题: 1.不用注册联机的乱七八糟的,验证还慢,直接选择脱机的. 2.推荐密码:zaq!2wsx直接进去,以后可以改. 3.有很多选项都可以不勾选,(只勾选 ...
- spark RDD,reduceByKey vs groupByKey
Spark中有两个类似的api,分别是reduceByKey和groupByKey.这两个的功能类似,但底层实现却有些不同,那么为什么要这样设计呢?我们来从源码的角度分析一下. 先看两者的调用顺序(都 ...