【发布时间】:2016-07-25 20:45:01
【问题描述】:
我们有一个基于 gin-gonic 用 go 编写的 API 服务器。我们注意到一些奇怪的事情,这使我们相信它是在串行处理请求,而不是预期的并行操作。考虑这个日志文件:
[GIN] 2016/04/05 - 17:24:37 | 200 | 5.738742ms | 64.... | POST /api/v2/d/
[GIN] 2016/04/05 - 17:24:40 | 200 | 3.262816256s | 64.... | POST /api/v2/d/
[GIN] 2016/04/05 - 17:24:42 | 200 | 3.563779ms | 64.... | POST /api/v2/d/
[GIN] 2016/04/05 - 17:24:43 | 200 | 105.429µs | 64.... | POST /api/v2/d/
[GIN] 2016/04/05 - 17:24:43 | 200 | 808.824µs | 64.... | POST /api/v2/d/
实时查看日志,直到第二次调用完成后才会显示最后 3 个条目。这五个调用是在 5 毫秒内对 API 进行的。我们希望调用应该并行处理。这意味着所有呼叫都应在 17:24:40 之前完成,而不是 17:24:43。 IE:当建立连接来处理请求时,服务器会产生一个新的线程/goroutine。如果不是这种情况,是否有人对以这种方式工作的软件包有任何建议。
这是我们第一个使用 gin-gonic 的项目,我想知道是否需要设置一些配置参数。感谢您提出任何想法/建议。
【问题讨论】:
-
你使用的是什么版本的 Go?
-
@JohnWeldon 我正在使用 1.6
-
因此,假设您有多个逻辑 CPU,您可能可能会看到并行性,但不能保证。 Goroutines 提供并发性,不一定是并行性。