goroutine

    8热度

    1回答

    为什么Go在写封闭频道时恐慌? 尽管人们可以使用value, ok := <-channel成语用于从信道读取,因此,确定的结果可用于击打一个封闭的通道进行测试: // reading from closed channel package main import "fmt" func main() { ch := make(chan int, 1) ch <- 2

    4热度

    2回答

    我有一个Golang结构在多个goroutines之间共享。 对于并发访问结构成员,有互斥体sync.RWMutex。 对于一个单独的goroutine访问的struct成员,是否需要互斥锁保护? 例如,在下面的代码中,一个写入程序goroutine访问成员shared.exclusiveCounter,没有任何锁定保护。这是正确的/安全的吗?还是需要互斥体,因为整个结构是通过多个goroutin

    2热度

    1回答

    如果有人分析了这两种范例之间的性能差异,我很好奇。 有一个听众的goroutine(也许几个),其监听套接字,并生成一个新的goroutine来处理信息,并一起到哪里它去发送。发送命令后,例程将完成并将被销毁。每个请求都会创建一个例程,然后在完成时将其销毁。 有一个听众的goroutine(也许几个),其监听套接字和数据传递给一个通道。许多goroutines阻止频道接收,并将轮流从频道中取出并处

    4热度

    1回答

    我在golang中比较新,并试图理解主要原则并使用chanels编写基于gouroutines的代码。 在其他LANGS,我用没有这样的仪器,我不知道像越来越恐慌这样的错误... 我的代码: package main import "fmt" import ( "time" ) type Work struct { x,y,z int } func worker(

    1热度

    1回答

    这与go tutorial select statement类似,但我没有从该帖子得到答案。所以我在这里问。谢谢回答。 在http://tour.golang.org/concurrency/5中,似乎“case c < - x:”总是准备好,这意味着这种情况不会阻止选择语句。 根据句子“A select blocks until one of case is can run,then it ex

    2热度

    1回答

    我在代码的一部分中遇到了麻烦。我正在写作狂欢框架(要清楚)。这是一个工人去例行公事,我希望它做的几件事情: 开关的结构类型的统计变量,根据 来源,会来的。我做了一个开关,但在所有其他 代码是正确的之前,我不知道开关是否正确写入 。 我得到缓存的日期,并把它放在新的工作项目。 我送工作信道 这里是我现在: func worker(in <-chan Task, out chan <- Work, w

    1热度

    1回答

    我很新,我在这个网站上搜索了这个麻烦,并且找到了回答的问题,但是无法对我的案例实现这些答案。我有一个代码: func receiveWork(out <-chan Work) map[string][]ChartElement { var countedData map[string][]ChartElement for el := range out { co

    -1热度

    2回答

    我正在使用GO语言的go1.5.3 linux/amd64版本。我有一个执行数学运算需要一些时间的去程序。每个例行的行为都是独立的,不需要阻止。 我的系统有12个内核。如果我产生了12个例程,它只需要所有内核的平均使用率高达31%。如果我使用24个例程,它将所有内核的平均使用率提高到49%。如果我使用240,我会得到77%。 2400给我76%。 显然,rand.Intn(j)操作是减慢它的速度。

    1热度

    1回答

    我想实现一个多线程爬虫使用go lang作为一个示例任务来学习语言。 它应该扫描页面,跟随链接并保存它们做DB。 为了避免重复我试图使用地图,我保存了所有我已经保存的网址。 同步版本工作正常,但我尝试使用goroutines时遇到麻烦。 我试图使用互斥锁作为地图和通道的同步对象来协调goroutines。但显然我不清楚他们的理解。 问题是我有很多重复的条目,所以我的地图存储/检查无法正常工作。 这

    1热度

    1回答

    因此,我试图实现一个简单地侦听Redis订阅(我使用Go-Redis库)的去例程,然后在它接收/处理后在通道上发送消息 redis消息。 事情是这样的: func foo(redis *redis.Client, comm chan HandlerSignal) { ... for { msg, err := pubsub.ReceiveMessage()