草庐IT

ios-multithreading

全部标签

multithreading - goroutine 或多线程在 golang 中不起作用

我试图在golang中实现多线程。我能够实现goroutines,但它没有按预期工作。下面是我准备的示例程序,functest(sstring,fo*os.File){vars1[105]intcount:=0forx:=1000;x输出-good0bye0bye0bye0bye0good1bye1bye1bye1bye1good2bye2bye2bye2bye2....等等。上面的程序会创建一个文件,并在文件中写入“Hello”和“bye”。我的问题是我正在尝试创建5个线程并希望使用不同的线程处理不同的值。如果你会看到上面的例子,它打印了4次“bye”。我希望使用5个线程输出如下所示

multithreading - Golang线程不是每次都执行

这个问题在这里已经有了答案:Nooutputfromgoroutine(3个答案)Goroutinedoesnotexecuteiftime.Sleepincluded(1个回答)关闭4年前。所以,我正在测试Golang。我知道fmt.Println不是线程安全的。所以,我尝试了sync.Mutex。程序如下:functhreder(mux*Mutex,iint){mux.Lock()fmt.Println("Iamthread:",i)mux.Unlock()return}funcmain(){m:=&Mutex{}fori:=0;i我期待300行输出。但是,我得到80-90行。我哪

go - 在 Golang 中连续运行 io.Copy(os.Stdout, &r) 结果不同

我在玩Golang。关于io.Copy我在代码中放置了2个连续的io.Copy,但我希望它输出两次结果(testtesttest)。但是第二个是零。谁能帮忙解释一下为什么?谢谢packagemainimport("io""os""strings""fmt")typetestReaderstruct{wio.Readerstrstring}func(tt*testReader)Read(b[]byte)(nint,errerror){io.Copy(os.Stdout,tt.w)n,err=tt.w.Read(b)iftt.w!=nil{return0,io.EOF}return}fun

multithreading - 如何在go中转换以下Thread语句

我正在尝试在go中转换以下线程的java语句;intnum=5;Thread[]threads=newThread[5];for(inti=0;i我想知道,如何将其转换为go?谢谢 最佳答案 Golang使用了一个叫做"goroutines"的概念(灵感来自"coroutines")而不是许多其他语言使用的“线程”。您的具体示例看起来像是sync.WaitGroup的常见用法输入:wg:=sync.WaitGroup{}fori:=0;i请注意,示例中的SomeFunction(...)可以是任何类型的工作,并将与所有其他调用同时执

multithreading - 为什么基于 channel 的 Lock block ?

嗨,我正在写一个Lock使用channel,旨在锁定/解锁给定“应用程序”的操作。总体思路是,一个协程持续监听两个channel:lockCh和unlockCh.任何Lock()操作发送自制channel到lockCh,并等待从那个自制channel读取,从读取这个channel完成意味着Lock()成功。类似的过程适用于Unlock().对于监听器gorouting,它会在接受Lock()时检查“应用程序”是否已被锁定,如果是这样,它将把那个自制的channel放到等待列表的尾部。如果有人Unlock(),它会唤醒(通过向channel发送消息)下一个服务员,或者如果没有其他人在等待

multithreading - 通过 golang 中的 channel 进行双向通信

我有几个函数,我希望它们以原子方式执行,因为它们处理敏感数据结构。假设以下场景:有两个函数:lock(sth)和unlock(sth),goroutine可以随时调用它们来锁定或解锁sth全局数组。我正在考虑拥有一个命令channel,以便goroutines将lock和unlock命令发送到channel中,并在channel的接收端,某种处理程序通过从channel中获取命令,依次处理lock、unlock请求。这很好,但是如果handler想要将结果发送回请求者怎么办?是否可以使用golangchannel这样做?我知道可以使用某种锁定机制,如互斥锁,但我想知道是否可以为这种用例

multithreading - 自同步 Goroutines 以死锁告终

我有一个压力测试问题,想通过Go中的简单同步来解决。到目前为止,我已经尝试查找关于我在Go中同步的特定用例的文档,但没有找到合适的文档。更具体一点:我必须完成一项任务,我必须在主例程中启动大量线程(在此示例中仅使用两个线程进行说明)。所有被启动的worker都应该以无序的方式自己准备一些初始化Action。直到它们到达一个小的命令序列,我希望所有的goroutines一次执行它们,这就是为什么我想要让goroutines相互同步。对我的任务来说非常重要的是,通过实例化所有其他goroutine的主例程的延迟不会影响工作人员执行的真正并行性(在注释中的标签#maximumparallel

go - 为什么io.EOF不是常数?

我很惊讶io.EOF不是一个常量,而是一个导出变量。虽然不是什么大事,但这会使它受到意外的重新分配。为什么不声明它为常数?这是因为constantsinGoareratherunusual? 最佳答案 确实,go在常量方面非常具体。语言不提供将变量冻结为不可变的内容。它不会编译:https://play.golang.org/p/s_HjtJl0QP6。 关于go-为什么io.EOF不是常数?,我们在StackOverflow上找到一个类似的问题: https

io - 中止来自另一个 goroutine 的 Read() 调用

我在IMAP服务器上工作,其中一项操作是升级连接以使用TLS(通过STARTTLS命令)。我们当前的架构有一个goroutine从套接字读取数据,解析命令,然后通过channel发送逻辑命令。另一个goroutine从该channel读取并执行命令。这在一般情况下效果很好。但是,在执行STARTTLS时,我们需要停止当前正在进行的Read()调用,否则Read()将使用来自TLS握手的字节。我们可以在两者之间插入另一个类,但是那个类将在Read()调用中被阻塞,我们遇到了同样的问题。如果网络连接是一个channel,我们可以添加另一个信号channel并使用select{}block来

multithreading - App Engine Channel API 的线程安全/原子性

当我尝试使用GoogleAppEngine的ChannelAPI从两个或多个goroutines和/或任务队列发送消息时会发生什么?例如gochannel.Send(context,clientID,"Hello")gochannel.Send(context,clientID,"World")我知道在GAEGo中,所有goroutines都被多路复用到一个线程上。然而,这仍然允许在I/O期间进行抢占,并且channel发送可能符合I/O的条件。GAE开发服务器似乎序列化了所有请求,所以我没有看到任何channel发送重叠。生产服务器似乎允许一些请求并发,但channel发送看起来是原