Questions tagged «multithreading»

多线程是计算机或程序通过利用多个并发的执行流(通常称为线程)来并发或异步执行工作的能力。

4
Java中的volatile和Synchronized之间的区别
我想知道将变量声明为as volatile和始终synchronized(this)在Java块中访问变量之间的区别吗? 根据本文http://www.javamex.com/tutorials/synchronization_volatile.shtml可以说很多,有很多区别,但也有一些相似之处。 我对这段信息特别感兴趣: ... 访问volatile变量永远不会阻塞:我们只做简单的读取或写入操作,因此与同步块不同,我们永远不会保持任何锁; 因为访问易失性变量永远不会持有锁,所以它不适用于我们希望以原子操作方式进行读写更新的情况(除非我们准备“错过更新”); 读-更新-写是什么意思?写不仅是更新,还是仅表示更新是取决于读取的写? 最重要的是,何时声明变量volatile而不是通过synchronized块访问变量更合适?volatile对依赖于输入的变量使用它是一个好主意吗?例如,有一个称为的变量render可以通过渲染循环读取并由keypress事件设置吗?



12
使用多重处理Pool.map()时无法腌制<type'instancemethod'>
我正在尝试使用multiprocessing的Pool.map()功能同时划分工作。当我使用以下代码时,它可以正常工作: import multiprocessing def f(x): return x*x def go(): pool = multiprocessing.Pool(processes=4) print pool.map(f, range(10)) if __name__== '__main__' : go() 但是,当我以更加面向对象的方式使用它时,它将无法正常工作。它给出的错误信息是: PicklingError: Can't pickle &lt;type 'instancemethod'&gt;: attribute lookup __builtin__.instancemethod failed 当以下是我的主程序时,会发生这种情况: import someClass if __name__== '__main__' : sc = someClass.someClass() sc.go() 这是我的someClass课: import multiprocessing class someClass(object): def __init__(self): pass def …

7
Haskell对Node.js的响应是什么?
我相信Erlang社区不会羡慕Node.js,因为它本身就进行非阻塞I / O,并具有将部署轻松扩展到一个以上处理器(Node.js甚至没有内置的功能)的方法。有关更多详细信息,请访问http://journal.dedasys.com/2010/04/29/erlang-vs-node-js和Node.js或Erlang 那Haskell呢?Haskell是否可以提供Node.js的某些好处,即一种避免使用I / O而不使用多线程编程的干净解决方案? Node.js有很多吸引人的地方 事件:无线程操作,程序员仅提供回调(如Snap框架中一样) 回调保证在单个线程中运行:不可能出现竞争条件。 漂亮又简单的UNIX友好API。奖励:出色的HTTP支持。DNS也可用。 默认情况下,每个I / O都是异步的。这样可以更轻松地避免锁定。但是,回调中过多的CPU处理会影响其他连接(在这种情况下,任务应拆分为较小的子任务并重新计划)。 客户端和服务器端使用相同的语言。(但是,我认为这一点没有太大价值。jQuery和Node.js共享事件编程模型,但其余部分却大不相同。我只是看不到如何在服务器端和客户端之间共享代码。在实践中很有用。) 所有这些都包装在一个产品中。

5
UI线程上的任务继续
是否有一种“标准”方法来指定任务继续应该在创建初始任务的线程上运行? 目前,我有下面的代码-它正在工作,但是跟踪调度程序并创建第二个Action似乎是不必要的开销。 dispatcher = Dispatcher.CurrentDispatcher; Task task = Task.Factory.StartNew(() =&gt; { DoLongRunningWork(); }); Task UITask= task.ContinueWith(() =&gt; { dispatcher.Invoke(new Action(() =&gt; { this.TextBlock1.Text = "Complete"; } });
214 c#  .net  wpf  multithreading  task 

12
处理来自Java ExecutorService任务的异常
我正在尝试使用Java的ThreadPoolExecutor类以固定数量的线程运行大量繁重的任务。每个任务都有很多地方,在这些地方可能会由于异常而失败。 我已经继承了子类,ThreadPoolExecutor并且重写了afterExecute应该提供运行任务时遇到的任何未捕获异常的方法。但是,我似乎无法使其正常工作。 例如: public class ThreadPoolErrors extends ThreadPoolExecutor { public ThreadPoolErrors() { super( 1, // core threads 1, // max threads 1, // timeout TimeUnit.MINUTES, // timeout units new LinkedBlockingQueue&lt;Runnable&gt;() // work queue ); } protected void afterExecute(Runnable r, Throwable t) { super.afterExecute(r, t); if(t != null) { System.out.println("Got an …



7
Java中是否会发生虚假唤醒?
看到各种与锁定相关的问题,并且(几乎)总是发现“由于虚假唤醒而引起的循环”术语1我想知道,有人经历过这种唤醒(例如,假设硬件/软件环境不错)吗? 我知道“虚假”一词没有明显的原因,但是发生此类事件的原因可能是什么? (1注意:我不是在问循环练习。) 编辑:一个帮助器问题(对于那些喜欢代码示例的人): 如果我有以下程序,并且运行它: public class Spurious { public static void main(String[] args) { Lock lock = new ReentrantLock(); Condition cond = lock.newCondition(); lock.lock(); try { try { cond.await(); System.out.println("Spurious wakeup!"); } catch (InterruptedException ex) { System.out.println("Just a regular interrupt."); } } finally { lock.unlock(); } } } 我该怎么做才能await将其虚假地唤醒,而无需永远等待随机事件?

15
在Python的调用者线程中捕获线程的异常
我对Python和多线程编程非常陌生。基本上,我有一个脚本可以将文件复制到另一个位置。我希望将其放置在另一个线程中,以便可以输出....以指示脚本仍在运行。 我遇到的问题是,如果无法复制文件,它将引发异常。如果在主线程中运行,这没关系;但是,具有以下代码不起作用: try: threadClass = TheThread(param1, param2, etc.) threadClass.start() ##### **Exception takes place here** except: print "Caught an exception" 在线程类本身中,我试图重新引发异常,但是它不起作用。我已经看到这里的人问类似的问题,但是他们似乎都在做比我想做的事情更具体的事情(而且我不太了解所提供的解决方案)。我见过有人提到的用法sys.exc_info(),但是我不知道在哪里或如何使用它。 非常感谢所有帮助! 编辑:线程类的代码如下: class TheThread(threading.Thread): def __init__(self, sourceFolder, destFolder): threading.Thread.__init__(self) self.sourceFolder = sourceFolder self.destFolder = destFolder def run(self): try: shul.copytree(self.sourceFolder, self.destFolder) except: raise

16
Java:如何测试调用System.exit()的方法?
我有一些应调用System.exit()某些输入的方法。不幸的是,测试这些情况会导致JUnit终止!将方法调用放在新的Thread中似乎无济于事,因为System.exit()终止JVM不仅终止当前线程。有什么通用的模式可以处理吗?例如,我可以用存根替换System.exit()吗? [编辑]有问题的类实际上是我要在JUnit中测试的命令行工具。也许JUnit根本不是适合该工作的工具?欢迎提出补充回归测试工具的建议(最好是与JUnit和EclEmma很好地集成在一起的工具)。

10
Python线程中的join()有什么用?
我正在研究python线程并遇到了join()。 作者告诉我们,如果线程处于守护程序模式,那么我需要使用它,join()以便线程可以在主线程终止之前完成自身。 但我一直在使用也没见他t.join()即使t不daemon 示例代码是这个 import threading import time import logging logging.basicConfig(level=logging.DEBUG, format='(%(threadName)-10s) %(message)s', ) def daemon(): logging.debug('Starting') time.sleep(2) logging.debug('Exiting') d = threading.Thread(name='daemon', target=daemon) d.setDaemon(True) def non_daemon(): logging.debug('Starting') logging.debug('Exiting') t = threading.Thread(name='non-daemon', target=non_daemon) d.start() t.start() d.join() t.join() 我不知道这是什么用途,t.join()因为它不是守护程序,即使删除它也看不到任何变化

14
ExecutorService,如何等待所有任务完成
等待所有任务ExecutorService完成的最简单方法是什么?我的任务主要是计算,因此我只想运行大量的作业-每个内核上一个。现在,我的设置如下所示: ExecutorService es = Executors.newFixedThreadPool(2); for (DataTable singleTable : uniquePhrases) { es.execute(new ComputeDTask(singleTable)); } try{ es.wait(); } catch (InterruptedException e){ e.printStackTrace(); } ComputeDTask实现可运行。这似乎是正确执行的任务,但代码崩溃上wait()用IllegalMonitorStateException。这很奇怪,因为我玩了一些玩具示例,而且看起来很奏效。 uniquePhrases包含数以万计的元素。我应该使用其他方法吗?我正在寻找尽可能简单的东西


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.