草庐IT

GC_concurrent

全部标签

concurrency - 为什么 go.net/websocket'api 不使用 channel 来发送和接收消息?

go.net/websocket包中有Read()和Write()函数,用于通过网络套接字发送和接收消息。为什么它不返回一个用于发送和接收消息的channel?我觉得像websocket、net这样的包是使用gochannel的完美场所。这个设计决定背后的原因是什么? 最佳答案 我不知道WebSocket的确切语义,但总的来说,我认为网络套接字不能很好地映射到channel中。Therewasactuallyanetchanpackage试图通过一般channel做到这一点,但已停止。我认为尝试通过一个channel实现支持大量协议

去旅游#10 : Lost in concurrency

我一直在努力完成所有的go教程之旅,但我被困在了thewebcrawlerexercise上。.我以为我完成了,但是输出不一致,我没有足够的并发经验来弄清楚为什么。Here's我的代码:packagemainimport("fmt""sync")typeFetcherinterface{//FetchreturnsthebodyofURLand//asliceofURLsfoundonthatpage.Fetch(urlstring)(bodystring,urls[]string,errerror)}varcache=struct{fetchedmap[string]boolsync

http - 净/http : concurrency and message passing between coroutines

我在RESTAPI服务器上工作,该服务器的功能之一是能够在创建新资源或修改现有资源时通过websocket通知任意数量的客户端。我有一个自定义操作路由器,用于将URL绑定(bind)到函数和gorillas的websocket库实现。对于IPC,我决定依赖channel,因为它似乎是协程之间通信的惯用方式。它的行为也像一个管道,这是我熟悉的概念。Create函数的原型(prototype)如下所示:funcCreate(reshttp.ResponseWriter,req*http.Request,userdatainterface{})(int,string,interface{})

concurrency - 使select语句同时等待多个 channel

引用自TheGoProgrammingLanguageSpecification:A"select"statementchooseswhichofasetofpossiblecommunicationswillproceed.Itlookssimilartoa"switch"statementbutwiththecasesallreferringtocommunicationoperations.如何在case子句中等待多个channel,以便仅当两个channel都返回时才执行case?示例:select{case 最佳答案 没有

go - GC 如何在没有单独的运行时或 VM 的情况下工作?

我的理解是,用Go编写的应用程序的可执行文件可以独立运行,而不需要在机器上安装Go。通常我的理解是GC(垃圾收集)由VM处理。在这种情况下,如果应用程序在没有这样的运行时的情况下独立运行,GC将如何处理?关于此的帮助和相同的文档会很好。 最佳答案 myunderstandingisthattheGC(GarbageCollection)ishandledbyaVM.以支持编程语言的典型VM为例以GC为特色,(编译形式)一个程序语言实际上是由VM管理的:VM运行程序代码并定期进行干预以执行GC任务。关键是每个程序运行在这样的VM中可以

concurrency - goroutines 导致严重的减速和头痛

我在使用goroutines时遇到了一些问题。为什么这段代码的执行时间约为125毫秒(请注意顺序执行):packagemainimport("os/exec""time""fmt")funcmain(){cmd:=exec.Command("lessc","--yui-compress","test.less")n:=2000start:=time.Now()fori:=0;i当这段代码大约需要20秒时(使用goroutines并发执行):packagemainimport("os/exec""time""fmt")funcmain(){cmd:=exec.Command("lessc

memory-management - delete() 是立即释放内存还是需要 runtime.GC() 来释放它?

我有一张mapmyMap:=map[string]stringmyMap['hello']='world'myMap['foo']='bar'当我从myMap中删除一个元素时,例如,delete(myMap['hello'])它是立即释放内存还是在垃圾收集器运行后释放内存。如果它在垃圾收集器运行后释放内存,是否运行runtime.GC()将立即清理内存。还有runtime.GC()资源匮乏吗?或者可以在每个delete()函数之后运行runtime.GC()更新2:忘记我的程序做了什么(基本更新1)检查此链接http://play.golang.org/p/Wb8-4qWyf4每10微

go - 大分配数据 block 的巨大 GC 性能问题

我刚刚注意到,如果我在程序中分配一个巨大的内存块。GC将占用所有程序时间。这是POC。https://gist.github.com/martende/252f403f0c17cb489de4funcmain(){////////////////!!!!!!!/*IfIuncomment2linesbelowprogrammrunsfast*/nodesPool:=make([]int,300e6,300e6)_=nodesPool//////////////////////7file,_:=os.Open("result.txt")deferfile.Close()reader:=b

concurrency - N>1 goroutines 的不同结果(在 N>1 Cpu :s). 为什么?

我有一个测试程序,在多个Cpu(Goroutines=Cpus)上执行多个goroutine时会给出不同的结果。“测试”是关于使用channel同步goroutines,程序本身计算字符串中字符的出现次数。它在一个Cpu/一个goroutine上产生一致的结果。请参阅playground上的代码示例(注意:在本地计算机上运行以在多核上执行,并观察结果数字的变化):http://play.golang.org/p/PT5jeCKgBv.代码摘要:该程序计算(DNA)字符串中4个不同字符(A、T、G、C)的出现次数。问题:在多个Cpu(goroutine)上执行时,结果(出现n个字符)会发

go - 从 slice 差异gccgo vs gc中删除元素

我发现GCCGO有一个非常奇怪的问题,我想知道是否有人可以解释它。我正在尝试使用建议的slice技巧(https://github.com/golang/go/wiki/SliceTricks)按索引从slice中删除一个元素。以下代码(https://play.golang.org/p/f039m1h7Z1):packagemainimport"fmt"funcmain(){xs:=[]int{0,1,2,3,4}i:=2xs,xs[len(xs)-1]=append(xs[:i],xs[i+1:]...),0fmt.Println(xs)}适用于go编译器(gorun),但是当我尝