- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试在 Windows 10 上的 Go (go1.8.3 windows/amd64) 中实现一个简单的回显服务器,但是在从客户端获得连接(使用 ncat 连接)后的一段时间内,我遇到了这种奇怪的 panic 。可以收发消息,但是不管怎么弄,过一会就死机了,不知道为什么。
代码是
package main
import (
"bufio"
"log"
"net"
)
func echo(conn net.Conn, c chan int) {
c <- 1
reader := bufio.NewReader(conn)
msg, err := reader.ReadBytes('\n')
if err != nil {
log.Printf("error reading from the reader: %v", err)
return
}
conn.Write(msg)
}
func handleConnection(conn net.Conn) {
log.Print("Got connection from: ", conn.RemoteAddr())
conn.Write([]byte("Hello, this is a Go echo server\n"))
c := make(chan int)
for {
go echo(conn, c)
<-c
}
}
func main() {
listener, err := net.Listen("tcp", "127.0.0.1:3000")
if err != nil {
log.Fatalf("couldn't create a tcp server: %v", err)
}
for {
conn, err := listener.Accept()
defer conn.Close()
if err != nil {
log.Printf("couldn't create a connection: %v", err)
return
}
go handleConnection(conn)
}
}
错误是
panic: net: inconsistent fdMutex
goroutine 1048589 [running]:
net.(*fdMutex).rwlock(0xc0420741c0, 0x1, 0x0)
C:/Go/src/net/fd_mutex.go:145 +0x1ab
net.(*netFD).readLock(0xc0420741c0, 0x0, 0x0)
C:/Go/src/net/fd_mutex.go:218 +0x39
net.(*netFD).Read(0xc0420741c0, 0xc365329000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
C:/Go/src/net/fd_windows.go:444 +0x5d
net.(*conn).Read(0xc04205e030, 0xc365329000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
C:/Go/src/net/net.go:181 +0x77
bufio.(*Reader).fill(0xc36532bf08)
C:/Go/src/bufio/bufio.go:97 +0x11e
bufio.(*Reader).ReadSlice(0xc36532bf08, 0xc36532be0a, 0xc36532be00, 0x0, 0x100000000000000, 0x0, 0x1000)
C:/Go/src/bufio/bufio.go:338 +0xc2
bufio.(*Reader).ReadBytes(0xc36532bf08, 0x100a, 0x1000, 0xc365329000, 0x1000, 0x1000, 0x0)
C:/Go/src/bufio/bufio.go:416 +0x6d
main.echo(0x574ce0, 0xc04205e030, 0xc042098d80)
C:/Users/fcfn/goecho/server.go:13 +0x10b
created by main.handleConnection
C:/Users/fcfn/goecho/server.go:27 +0x271
最佳答案
感谢@JimB,我更好地理解了问题的本质。他是这样说的:
The actual error is because you're calling Read from an unbounded number of goroutines. The net package assumes there's no reason to ever have more than 1<<20 concurrent operations on a net.Conn. – JimB
这里有一些错误的代码,这并不能完全解决手头的问题。正如 JimB 所建议的那样,我将其删除,以免误导任何人。
我从 JimB 那里学到了什么:
echo
函数不应该是 goroutines,因为读取是一个阻塞操作,我们不能对连接做任何事情直到我们了解客户端发送给我们的内容,因此不需要并发;另一方面,handleConnection
在 goroutine 中运行,因为它应该同时处理多个连接。关于windows - panic : net: inconsistent fdMutex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44678216/
获取错误 ORA-00932: inconsistent datatypes: expected CHAR got NUMBER 00932. 00000 - "inconsistent dataty
我的main.sass中有这个: #thing { -moz-box-sizing: border-box; -webkit-box-sizing: border
在 Python 中,为什么 [:] 切片操作的行为不一致? 它对于列表和字符串的行为有所不同。 对于列表,它给出一个副本列表对象,对于字符串,它给出相同的字符串对象。 我觉得这令人困惑,违反直觉。有
在检查和测试正则表达式的各个方面时,我偶然发现了一种奇怪且“不一致”的行为。我试图在正则表达式中使用一些代码,但同样的行为也适用于使用 void 代码块。 尤其是最让我感动的是,当我互换 :g 和 :
已连接两个支持蓝牙的设备。一个通过outputStream向另一个发送周期性时间戳(writeTime),另一个通过inputStream检索writeTimes并附加自己的时间戳(readTime)
我有以下距离矩阵: delta = [[ 0. 0.71370845 0.80903791 0.82955157 0.56964983 0. 0.
我正在使用 recyclerView 并将数据加载为 arrayList。如果 arrayList 少于 7 个项目,则不会发生崩溃。 否则,我会遇到这个 fatal error : java.lan
为什么结果是: double a = 0.0/0.0; double b = 0/0.0; = NaN 但是结果例如: double e = 0.1/0.0; double e = 12.0/0.0;
这是我的 Java 1.6 类: public class Foo { private ArrayList names; public void scan() { if (names
我正在制作一个使用 encog 预测足球比赛结果的程序。我创建了一个神经网络,使用弹性传播训练方法使用 90 场比赛的数据对其进行训练。我将比赛结果标记为 1 表示主场获胜,0 表示平局,-1 表示客
我正在向我的 App 类中正在进行的 WPF 应用程序添加一些可绑定(bind)的 CLR 属性,但由于这个不一致的可访问性错误,我无法编译。 Inconsistent Accessibility:
我正在尝试使用带有以下参数的 solve.QP 函数(来自 quadprog 包)运行优化 R = matrix( c( 2.231113e-05,-4.816095e-05,-5.115287e-0
我的 solr 架构中有以下两个字段: 当我在启用 facet 的情况下发出请求(faceting on brand_id) http://example.com/solr/select?wt=j
我在 UIView 上有一个 UIButton。我想以编程方式确定显示 View 时在按钮内显示哪个图像。我已经重写了 UIView 中的 drawRect 方法并使用 setImage 来显示所需的
在常规中: println 'test' as Boolean //true println 'test'.toBoolean() //false println new Boolean('test'
例如,在 message.properties 中空白字段的默认 i18n 消息是: default.blank.message=Property [{0}] of class [{1}] canno
我正在尝试使用 array_multisort() 在其子数组的基础上对数组进行排序功能...... 在尝试的同时; print_r($mar); echo ''; $arr2 = array_mul
我正在使用 MALLET 来训练 ParallelTopicModel。训练后,我得到一个 TopicInferencer,取一个句子,通过推理器运行 15 次,然后检查结果。我发现对于某些主题,每次
1) 为什么在 JavaScript 中存在这种不一致 - 我期望第四行也返回 11: (function(n, m) { n = n + m; return n })(3, 8)
上下文: 我有一个小部件,它基本上由一个包装了一堆 TextView 的 RelativeLayout 组成。这是我希望小部件的外观,然后是 XML 布局代码: 问题:我
我是一名优秀的程序员,十分优秀!