首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在go中编写长时间运行的请求?

如何在go中编写长时间运行的请求?
EN

Stack Overflow用户
提问于 2015-03-02 22:32:14
回答 1查看 245关注 0票数 1

到目前为止的故事。我们正在考虑放弃perl。候选者是go或node。我已经把它们都启动并运行了,所以我测试了一些轻量级的负载。然后,我决定强调应用程序。每个框架都能够处理

代码语言:javascript
运行
复制
ab -n 1000 -c 100 http://localhost:8080/

除了go。如果我没有限制连接,那么我会得到错误'too give‘,如果我将连接限制到100,那么ab会给出超时错误并退出。

我的go代码的gist https://gist.github.com/2d8473ce576cab5f7c66。我应该更改什么,才能在加载的情况下使用go服务器?

EN

回答 1

Stack Overflow用户

发布于 2015-03-03 03:31:38

问题看起来像是你用太多的同时连接重载了你的数据库。记住,Go是一种真正的并发语言。

您有没有尝试过将db.SetMaxOpenConns(1000)设置为一个小得多的数字,比如db.SetMaxOpenConns(10)

或者,您可以限制同时运行的goroutines的数量,如下所示

全局声明这些

代码语言:javascript
运行
复制
const maxAtOnce = 50

var limiter = make(chan struct{}, maxAtOnce)

func init() {
    // Fill up with tokens
    for i := 0; i < maxAtOnce; i++ {
        limiter <- struct{}{}
    }
}

在你的getTimeSheet中,把这个放在开头

代码语言:javascript
运行
复制
// take a token
<-limiter
// give it back on exit
defer func() {
    limiter <- struct{}{}
}()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28812293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档