草庐IT

concurrent

全部标签

去旅游#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 最佳答案 没有

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

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个字符)会发

concurrency - 在 golang 中创建同步列表

首先,如果这是一个愚蠢的问题,请原谅我。我想创建一个通用的同步列表(就像在Java中一样)以便在我的Go项目中重用。我找到了Go的源码linkedlist我想知道是否只需将互斥锁添加到列表操作函数中就足够了吗? 最佳答案 如果您要创建并发安全的容器,则需要保护所有对数据的访问,而不仅仅是写入。在不同步读取的情况下检查元素,甚至调用Len()都可能返回无效或损坏的数据。用互斥锁保护整个数据结构可能比实现自己的并发链表更容易。 关于concurrency-在golang中创建同步列表,我们在

戈朗 : limit concurrency levels of a blocking operation

我有以下场景:我在channel上收到一条消息,告诉我上传文件。上传是由阻塞函数uploadToServer完成的。zipGenchannel每秒可能会收到几条消息,我想同时上传最多5个文件(不多,但可能更少-取决于在zipGen上发送了多少消息由超出此问题范围的第三名worker提供)。listenToZips函数在go例程中运行(golistenToZips()在文件的init函数中):funclistenToZips(){for{select{casezip:=如果我启动gouploadToServer(zip)而不是仅仅uploadToServer(zip)-我会得到太多的并发

戈朗 : Processing 5 huge files concurrently

我目前在Perl中处理了5个巨大的(每个400万行)日志文件,我想我可以尝试在Go中实现相同的功能及其并发功能。因此,由于对Go缺乏经验,我正在考虑按以下方式进行操作。对该方法的任何评论将不胜感激。一些粗略的伪代码:varwg1sync.WaitGroupvarwg2sync.WaitGroupfuncprocessRow(rRow){wg2.Add(1)deferwg2.Done()res=returnres}funcprocessFile(fFile){wg1.Add(1)open(newfileFile)deferwg1.Done()line=result=goprocessRo

concurrency - 为什么这段 Go 代码会死锁?

packagemainimport"fmt"import"runtime"import"time"funccheck(idint){fmt.Println("Checked",id)我是Go的新手,所以任何指示都会很棒。我将如何调试这样的东西?您可以运行代码片段http://play.golang.org/p/SCr8TZXQUE更新:没有这行也能工作在Playground上,我想知道为什么?(正如@dystroy所提到的,这可能是因为Playground处理时间的方式)当我在本地尝试时,这是输出:Calledwith0Calledwith1Checked0Calledwith2Che

concurrency - Golang 上传整个目录并发返回到许多打开的文件

我正在尝试将整个目录上传到服务器。它适用于小目录,但如果有100多张图片,它会返回“对许多打开的文件”的错误。我在读取文件后立即关闭文件。知道如何解决这个问题吗?这是我的代码funcuploadDir(pathstring)error{dir,err:=os.Open(path)iferr!=nil{returnerr}files,err:=dir.Readdirnames(-1)iferr!=nil{returnerr}dir.Close()errChan:=make(chanerror)resChan:=make(chan*client.PutResult)remaining:=l