我有一个简单的程序,下面是一个简单的 HTTP 客户端和服务器。我正在测试Go 1.11MaxConnsPerHost中http.Transport引入的功能是否如宣传的那样工作。但是,当我运行代码超过 10-30 分钟时,ESTABLISHED 连接慢慢超过了设置。难道我做错了什么?MaxConnsPerHost
package main
import (
"io/ioutil"
"log"
"net"
"net/http"
"time"
)
func main() {
// Server
//
go func() {
if err := http.ListenAndServe(":8081", http.HandlerFunc(
func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("hi"))
},
)); err != nil {
log.Fatal(err)
}
}()
// Client settings
//
c := &http.Client{
Timeout: 30 * time.Second,
Transport: &http.Transport{
Proxy: http.ProxyFromEnvironment,
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
DualStack: true,
}).DialContext, …Run Code Online (Sandbox Code Playgroud) 我有下面的示例,其中两个 goroutine 应该并行运行。但是如果你检查输出,第二个 goroutine 仅在第一个 goroutine 完成后运行。所以,它是顺序的。
\n\n添加 2 个处理器:runtime.GOMAXPROCS(2)也没有帮助。我在 8 核 Mac pro 上运行,这绝对不是硬件问题。\n所以我的问题 - Golang 真的是并行的吗?如何使下面的示例并行运行?
\n\n输出:
\n\nThread 1\nThread 1\n \xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6....\nThread 1\nThread 1\nThread 2\nThread 2\n \xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6\xe2\x80\xa6....\nThread 2\nThread 2\nRun Code Online (Sandbox Code Playgroud)\n\n去代码:
\n\npackage main\n\nimport (\n "runtime"\n "time"\n)\n\nfunc main() {\n\n runtime.GOMAXPROCS(2)\n\n go func() {\n for i := 0; i < 100; i++ {\n println("Thread 1")\n //time.Sleep(time.Millisecond * 10)\n }\n }()\n\n go func() {\n for i := 0; i < 100; i++ {\n println("Thread 2")\n //time.Sleep(time.Millisecond …Run Code Online (Sandbox Code Playgroud)