jjzjj

Multithreading

全部标签

multithreading - 如何在管道中同步 goroutines

我需要帮助才能理解为什么以下代码不起作用。我正在构建一个管道并尝试有一个步骤来同步来自两个源channel的值。我的源代码/生产者代码如下所示(在我的真实代码中,我从文件中读取文本)。源已排序,但不能保证两个源中的值都存在。funcSource()同步代码如下所示:funcSync(a,bav{out我的程序看起来像这样:funcmain(){os:=Source()ns:=Source()forval:=rangeSync(ns,os){fmt.Printf("[SYNCED]%v\n",val)}}预期的行为是我的两个源将值缓冲到channel中,我的同步首先从第一个源读取值。然后

multithreading - 戈朗 : Why are goroutines not running in parallel?

我有下面的示例,其中两个goroutine应该并行运行。但是如果你检查输出,第二个goroutine只在第一个goroutine完成后运行。所以,它是顺序的。添加2个处理器:runtime.GOMAXPROCS(2)也没有帮助。我在8核Macpro上运行,这绝对不是硬件问题。所以我的问题-Golang真的是并行的吗?如何让下面的例子运行并行?输出:Thread1Thread1…………....Thread1Thread1Thread2Thread2…………....Thread2Thread2去代码:packagemainimport("runtime""time")funcmain(){

multithreading - 如果一个 goroutine 已完成,控制 goroutine 关闭的规范方法是什么?

我有一段定义任务的结构,每个任务都在一个goroutine中运行,我希望所有的goroutines在第一个goroutines通过信号task.signalComplete完成任务时停止目前我有以下内容。for_,task:=rangetaskList{gofunc(task*myTask,firstCompleteSignalchan这是规范的吗?或者是否有像sync.WaitGroup这样的库来为我做这件事来等待所有goroutine完成? 最佳答案 常见的习惯用法是在调用代码和goroutine之间共享一个Donechanne

multithreading - 如何运行最大数量的 goroutine

代码是这样的:funcfind(startint,endint){fori:=start;i也就是我事先知道goroutines的最大线程数和“length”长度的时候。但是如果我不知道goroutine可以运行多少个线程,以及“length”的长度。有没有办法把“长度”分成相等的部分进行线程处理呢?例如:length=10,最大可以运行的goroutine是2,它会将length分成2个线程(10/2,每个长度为5),以便能够同时处理。 最佳答案 最大化吞吐量就是摆脱瓶颈。首先找到时间丢失最多的地方。有时运行太多的goroutin

multithreading - goroutine调用exec后主线程不运行?

我正在阅读Go中的exechttps://gobyexample.com/execing-processes,并尝试使用goroutines做同样的事情。在下面的代码中,我试图让Go运行ls,然后在主线程中打印一条成功消息。但是,它只打印ls,而不打印成功消息。这是怎么回事?谢谢。packagemainimport"syscall"import"os"import"os/exec"import"fmt"funcmain(){p:=fmt.Printlndone:=make(chanbool)binary,lookErr:=exec.LookPath("ls")iflookErr!=ni

multithreading - 如何安排运行的非阻塞函数

我的问题是如何安排每隔N个时间间隔运行独立的非阻塞函数。我最初的方法是在select语句中使用gochannels以非阻塞方式接收值,并在每个函数中使用time.Sleep(N)来安排调用。在下面的代码片段中,这仅适用于第一次运行;然而,在第一次调用之后,它会不断重复调用computeY(),而不考虑time.Sleep()调用。packagemainimport("fmt""time")var(xstring=""ystring="")funccomputeY(cchanstring){time.Sleep(10*time.Second)fmt.Println("I'minY")y=

android - 将按钮从相对布局更改为线性布局奇怪的副作用

今天发生在我身上的最奇怪的事情导致数小时的沮丧和愤怒管理问题。我有一个可以运行的Android幻灯片应用程序。但是,我对按钮(在相对布局中)不满意,并将它们移至线性布局。但是,在运行我的应用程序时,按钮的行为发生了交换(即按钮1执行按钮2的工作,反之亦然)。我能够通过更改其中一个按钮的ID来解决这个问题,而不是全部(这没有用)。与此相关的还有,当我切换方向时,我的应用程序开始崩溃。当我有相对布局时它以前工作过。(我正在使用处理程序更改幻灯片的UI)我无法解决这个问题,所以我恢复了我的相对布局,但我首先想知道这是怎么发生的。有效的布局:导致问题的代码: 最佳答

xml - 在后台线程上将 XML 解析为 CoreData 以不锁定 UI

我的应用程序将一个xml文件解析为核心数据以填充一个uitableview。当我触发刷新时,它应该去下载一个新的xml文件,在后台线程上解析它,然后将它一次全部保存到managedobjectcontext(替换旧的managedobjectcontext数据),然后更新表。这样,类似于Twitter应用程序,用户可以触发重新加载并在加载时仍然滚动。这似乎是一件非常标准的事情,但我似乎找不到任何帮助。目前我正在使用NSURLConnection在我的AppDelegate中下载XML以不锁定UI。下载完成后调用:ParseOperation*parseOperation=[[Parse

android - 如何使用 AsyncTask 和 PublishProgress 获取 XML

我解析XML数据并将其放入一个对象中。这需要相当长的时间,我决定使用AsyncTask在后台运行它。我的代码几乎与这个例子完全一样:HowtogetXMLusingAsyncTaskandTimer?不同之处在于我想在做多时发布进度。我要发布进度的代码的相关部分:@OverridepublicvoidendElement(StringnamespaceURI,StringlocalName,StringqName)throwsSAXException{if(localName.equalsIgnoreCase("client")){clients.addClient(mClient);

java - Java 5 中的线程安全 XML 验证

所以我四处寻找线程安全的JavaXMLvalidator,但似乎不存在:SchemFactory-记录为非线程安全Validator-记录为非线程安全Schema-记录为线程安全,butactuallyisn'tjavax实现之外还有什么?请注意,我在Java5下,不能使用任何Guava库或任何超出apache-commons的东西,我已经探索并发现了theValidatorframework,但我不确定这是否真的是线程安全的,因为它说了以下内容:CurrentlyValidatorinstancesmaybesafelyreusedifthecurrentValidatorResou