标签: concurrency

"Java Concurrency In Practice"仍然有效吗?

Java并发在实践中是否仍然有效?我想知道本书中描述的想法,概念和实现是否仍然符合最新的Java版本.

我问,因为最新版本是在2006年完成的.

java concurrency java-7 java-8

291
推荐指数
8
解决办法
9万
查看次数

ruby有真正的多线程吗?

我知道使用绿色线程的ruby的"合作" 线程.如何在我的应用程序中创建真正的"操作系统级"线程,以便使用多个cpu内核进行处理?

ruby concurrency multithreading

285
推荐指数
3
解决办法
7万
查看次数

Node.js在内部依赖Threads时本身如何更快?

我刚观看了以下视频:Node.js简介,但仍然不明白你如何获得速度优势.

主要是,有一点Ryan Dahl(Node.js的创建者)说Node.js是基于事件循环而不是基于线程的.线程很昂贵,应该只留给并发编程的专家来使用.

之后,他展示了Node.js的体系结构堆栈,它具有底层的C实现,内部有自己的Thread池.显然,Node.js开发人员永远不会启动自己的线程或直接使用线程池...他们使用异步回调.我明白了.

我不明白的是,Node.js仍然在使用线程...它只是隐藏了实现,所以如果有50个人请求50个文件(当前不在内存中),那么如何更好,那么不需要50个线程?

唯一的区别是,由于它在内部管理,Node.js开发人员不必编写线程细节的代码,但在其下面仍然使用线程来处理IO(阻塞)文件请求.

那么你是不是真的只是遇到一个问题(线程)并在问题仍然存在时将其隐藏起来:主要是多线程,上下文切换,死锁......等等?

必须有一些我仍然不明白的细节.

javascript architecture concurrency node.js

279
推荐指数
6
解决办法
4万
查看次数

Java中的易失性与静态性

说这static意味着所有对象的值的volatile一个副本并且意味着所有线程的值的一个副本是否正确?

无论如何,static变量值也将成为所有线程的一个值,那么我们为什么要这样做volatile呢?

java concurrency static multithreading volatile

260
推荐指数
5
解决办法
14万
查看次数

AsyncTask在概念上是否真的有缺陷,或者我只是缺少某些东西?

我已经调查了这个问题好几个月了,想出了不同的解决方案,我不满意,因为它们都是大规模的黑客攻击.我仍然无法相信一个设计有缺陷的课程已经进入框架而没有人在讨论它,所以我想我一定要错过一些东西.

问题在于AsyncTask.根据它的文件

"允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序."

然后该示例继续示出如何showDialog()调用一些示例性方法onPostExecute().然而,这对我来说似乎完全是设计的,因为显示一个对话框总是需要引用一个有效的Context,而AsyncTask 绝不能保持对上下文对象的强引用.

原因很明显:如果活动被破坏而触发任务怎么办?这可能一直发生,例如因为你翻转了屏幕.如果任务将持有对创建它的上下文的引用,那么您不仅要继续使用无用的上下文对象(窗口将被销毁,并且任何 UI交互都会因异常而失败!),您甚至可能会创建一个内存泄漏.

除非我的逻辑在这里有缺陷,否则转换为:onPostExecute()完全没用,因为如果你没有访问任何上下文,这个方法在UI线程上运行有什么用?你不能在这里做任何有意义的事情.

一种解决方法是不将上下文实例传递给AsyncTask,而是传递给Handler实例.这是有效的:因为Handler松散地绑定了上下文和任务,所以你可以在它们之间交换消息而不会有泄漏的风险(对吧?).但这意味着AsyncTask的前提,即您不需要打扰处理程序,是错误的.它似乎也滥用了Handler,因为你在同一个线程上发送和接收消息(你在UI线程上创建它并在onPostExecute()中通过它发送它也在UI线程上执行).

最重要的是,即使使用了这种解决方法,您仍然会遇到这样的问题:当上下文被破坏时,您没有记录它触发的任务.这意味着您必须在重新创建上下文时重新启动任何任务,例如在屏幕方向更改后.这是缓慢而浪费的.

我对此的解决方案(在Droid-Fu库中实现)是维护WeakReferences从组件名称到其唯一应用程序对象上的当前实例的映射.每当启动AsyncTask时,它都会在该映射中记录调用上下文,并且在每次回调时,它将从该映射中获取当前上下文实例.这可以确保您永远不会引用陈旧的上下文实例,并且您始终可以访问回调中的有效上下文,这样您就可以在那里进行有意义的UI工作.它也不会泄漏,因为引用很弱并且在没有给定组件的实例存在时被清除.

尽管如此,这是一个复杂的解决方法,需要对一些Droid-Fu库类进行子类化,这使得这种方法非常具有侵入性.

现在我只想知道:我是否只是大量遗漏某些东西,或者AsyncTask是否真的完全有缺陷?您的使用经验如何?你是怎么解决这些问题的?

感谢您的输入.

concurrency android handler android-asynctask

260
推荐指数
5
解决办法
3万
查看次数

254
推荐指数
3
解决办法
22万
查看次数

在Python中发送100,000个HTTP请求的最快方法是什么?

我正在打开一个有100,000个URL的文件.我需要向每个URL发送HTTP请求并打印状态代码.我正在使用Python 2.6,到目前为止,我看到了Python实现线程/并发的许多令人困惑的方式.我甚至看过python concurrence库,但无法弄清楚如何正确编写这个程序.有没有人遇到过类似的问题?我想通常我需要知道如何尽快在Python中执行数千个任务 - 我想这意味着'同时'.

python concurrency http

253
推荐指数
10
解决办法
16万
查看次数

为什么wait()始终处于同步块中

我们都知道,为了调用Object.wait(),这个调用必须放在synchronized块中,否则IllegalMonitorStateException抛出一个.但是这个限制的原因是什么?我知道wait()释放监视器,但为什么我们需要通过使特定块同步显式获取监视器,然后通过调用释放监视器wait()

如果可以wait()在同步块之外调用,保留它的语义 - 暂停调用程序线程,可能造成的损害是什么?

java concurrency multithreading wait

250
推荐指数
3
解决办法
13万
查看次数

Java的JDK中是否有并发List?

如何创建并发List实例,我可以通过索引访问元素?JDK是否有我可以使用的任何类或工厂方法?

java concurrency list

248
推荐指数
6
解决办法
27万
查看次数

未来和承诺之间有什么区别?

Future和之间有什么区别Promise
它们都像未来结果的占位符,但主要区别在哪里?

java concurrency future promise

241
推荐指数
7
解决办法
13万
查看次数