Tag: multithreading

Java中的ThreadFactory用法

有人可以简单地解释何时和何时使用ThreadFactory? 有和没有使用ThreadFactory的例子可能对理解差异很有帮助。 谢谢!

Objective-C中的同步和asynchronous调用与multithreading之间有什么区别?

最长的时间,我认为asynchronous是在后台线程上运行的东西的同义词,同步意味着在主线程(阻止UI更新和交互)。 我知道不在昂贵的动作的主线程上运行是因为它不允许UI动作发生,因为主线程被占用,但为什么同步麻烦? 但是,由于引起了我的注意,您可以在主线程上进行asynchronous调用,并在后台线程上进行同步调用。 我总是听到人们说不要同步或在主线程上使用昂贵的调用,因为它会阻止用户的用户界面。 这两个单独的问题,我应该确保我不这样做? 有什么区别?

线程最佳实践

我所从事的许多项目的线程实现效果不佳,而且我也不得不跟踪这些项目。 有没有一种公认的最好的方式来处理线程。 我的代码总是在等待一个永远不会触发的事件。 我有点像一个devise模式或什么东西。

如何退出所有正在运行的线程?

以下代码不会退出该应用程序。 我怎样才能退出应用程序,并确保所有正在运行的线程都closures? foreach (Form form in Application.OpenForms) { form.Close(); } Application.Exit();

如果语句与string比较失败

我真的不知道为什么下面的if语句没有执行: if (s == "/quit") { System.out.println("quitted"); } 下面是全class。 这可能是一个非常愚蠢的逻辑问题,但我已经把我的头发放在这里,无法弄清楚这一点。 感谢您的期待:) class TextParser extends Thread { public void run() { while (true) { for(int i = 0; i < connectionList.size(); i++) { try { System.out.println("reading " + i); Connection c = connectionList.elementAt(i); Thread.sleep(200); System.out.println("reading " + i); String s = ""; if (c.in.ready() == true) […]

C ++线程池

什么是一个好的开源的C ++线程池实现在生产代码(类似boost)? 请提供您自己的示例代码或示例代码使用情况的链接。

命名约定的线程?

对线程进行命名是很有帮助的,因此可以对哪些线程进行诊断和debugging目的进行分类。 对于multithreading应用程序中的线程是否有一个特定的命名约定,比另一个更好? 任何指导? 什么样的信息应该进入一个线程的名称? 你有什么了解你的线程命名,可能有助于其他人?

Python支持multithreading吗? 它可以加快执行时间吗?

我对于multithreading是否在Python中工作有些困惑。 我知道有很多这方面的问题,我已经阅读了很多,但我仍然感到困惑。 我从我自己的经验知道,并已经看到其他人发表自己的答案和在Python中的multithreading确实是可能的StackOverflow的例子。 那么为什么每个人都一直说Python被GILlocking,并且一次只能运行一个线程呢? 这显然是工作。 还是有一些区别,我不在这里? 许多海报/受访者也不断提到线程是有限的,因为它不使用多个核心。 但我会说他们仍然是有用的,因为他们同时工作,从而更快地完成组合的工作量。 我的意思是为什么会有一个Python线程模块呢? 更新: 感谢所有迄今为止的答案。 我理解的方式是,multithreading只能针对一些IO任务并行运行,但是一次只能运行一个CPU线程的多核心任务。 我不完全确定这对我来说意味着什么,所以我只是举一个我想要multithreading的任务的例子。 例如,假设我想循环一个非常长的string列表,我想对每个列表项进行一些基本的string操作。 如果我将这个列表分开,发送每个子列表在一个新的线程中由我的循环/string代码处理,并将结果发回队列,这些工作负载是否会同时运行? 最重要的是,这会从理论上加快运行脚本所需的时间? 另一个例子是,如果我可以在四个不同的线程中使用PIL来渲染和保存四张不同的图片,那么这比一个接一个地处理图片要快吗? 我想这个速度组件是我真正想知道的,而不是正确的术语是什么。 我也知道多处理模块,但是我现在的主要兴趣是中小型任务加载(10-30秒),所以我认为multithreading将会更合适,因为subprocess可能启动缓慢。

LinkedBlockingQueue的insert和remove方法是否线程安全?

我在两个不同的线程之间使用LinkedBlockingQueue 。 一个线程通过add添加数据,而另一个线程通过take接收数据。 我的问题是,我需要同步访问add和take 。 LinkedBlockingQueue的insert和remove方法是否线程安全?

Thread.Sleep(1)是否特殊?

Joe Duffy( Windows上的Concurrent Programming的作者)在这篇博客文章中写道,Thread.Sleep(1)优于Thread.Sleep(0),因为它将挂起相同和更低优先级的线程,而不是像Thread 。睡眠(0)。 MSDN的.NET版本说 Thread.Sleep(0)是特殊的,它将挂起这个线程,并允许其他等待的线程执行。 但是它没有提及Thread.Sleep(1)(对于任何.NET版本)。 那么Thread.Sleep(1)实际上是在做什么特别的事情呢? 背景: 我正在刷新我对并发编程的知识。 我写了一些C#代码来清楚地显示前/后增量和减量是非primefaces的,因此不是线程安全的。 为了避免需要创build数百个线程,在递增共享variables之后放置一个Thread.Sleep(0)来强制调度器运行另一个线程。 线程的这种定期交换使得前/后递增/递减的非primefaces性更加明显。 Thread.Sleep(0)似乎不会导致额外的延迟,如预期的那样。 但是,如果我改变这个Thread.Sleep(1),它似乎恢复到正常的睡眠行为(例如,我得到大约至less1毫秒的延迟)。 这将意味着虽然T​​hread.Sleep(1)可能是首选,但是在循环中使用它的任何代码将运行得更慢。 这个问题“有人能解释这个有趣的睡眠行为(1)吗? 是相关的,但它是C ++的重点,只是在乔·达菲的博客文章重复的指导。 这里是我的代码感兴趣的人(从LinqPad复制,所以你可能需要添加一个类): int x = 0; void Main() { List<Thread> threadList=new List<Thread>(); Stopwatch sw=new Stopwatch(); for(int i=0; i<20; i++) { threadList.Add(new Thread(Go)); threadList[i].Priority=ThreadPriority.Lowest; } sw.Start(); foreach (Thread thread in threadList) { thread.Start(); } foreach (Thread thread […]