我正在GO中编写一个应用程序,它使用encoding/gob在节点之间通过UDP发送结构和切片.它工作正常,但我注意到encoding/json也有类似的API.搜索并找到此信息(https://golang.org/pkg/encoding/):
gob Package gob管理gobs流 - 在编码器(发送器)和解码器(接收器)之间交换的二进制值.
json包json实现了RFC 4627中定义的JSON编码和解码.
有人可以向我解释一个人是否比另一个人更有效率,并且一般比较何时选择什么?另外如果我需要与非golang应用程序接口,我想json会更受欢迎?
我编写了在每个Docker容器中运行的golang应用程序。它通过tcp和udp使用protobufs相互通信,我使用Hashicorp的memberlist库来发现网络中的每个容器。在docker stats上,我看到内存使用量呈线性增加,因此我试图查找应用程序中的任何泄漏。
由于它是一个可以继续运行的应用程序,因此请使用http pprof来检查任何一个容器中的实时应用程序。我看到即使docker stats线性增加,runtime.MemStats.sys也保持不变。我的--inuse_space约为1MB,当然--alloc_space随时间不断增加。这是alloc_space的示例:
root@n3:/app# go tool pprof --alloc_space main http://localhost:8080/debug/pprof/heap
Fetching profile from http://localhost:8080/debug/pprof/heap
Saved profile in /root/pprof/pprof.main.localhost:8080.alloc_objects.alloc_space.005.pb.gz
Entering interactive mode (type "help" for commands)
(pprof) top --cum
1024.11kB of 10298.19kB total ( 9.94%)
Dropped 8 nodes (cum <= 51.49kB)
Showing top 10 nodes out of 34 (cum >= 1536.07kB)
flat flat% sum% cum cum%
0 0% 0% 10298.19kB 100% runtime.goexit
0 0% 0% 6144.48kB 59.67% main.Listener
0 0% 0% 3072.20kB 29.83% github.com/golang/protobuf/proto.Unmarshal
512.10kB 4.97% 4.97% 3072.20kB 29.83% …
Run Code Online (Sandbox Code Playgroud)