Tag: concurrency

Dalvik VM和Java内存模型(Android上的并发编程)

我正在开发涉及大量并发编程的Android项目,我将实现一些自定义的线程间通信(来自java.util.concurent的一个不适合我的目的)。 并发编程并不容易,但对于Dalvik而言似乎更难。 要获得正确的代码,您应该了解一些具体的事情,以及Dalvik出现的问题。 我只是找不到有关Dalvik VM的详细文档。 大多数Android资源(甚至是developer.android.com都关注平台API,并不提供任何关于一些不平凡(或低级)事物的深层信息)。 例如,Dalvik VM符合哪个版本的Java语言规范 ? 根据回答, volatilevariables的处理是不同的,并影响使用volatilevariables的任何并发代码。 已经有一些相关的问题了: Dalvik的内存模型和Java的一样吗? 在Android中双击lockinglocking fadden的一些答案是非常有用的,但我仍然想要得到更详细和完整的问题的理解。 所以在下面的一个原始问题我很有趣(我会更新列表,如有必要,以前的问题的答案将到达): 在哪里可以find有关Dalvik VM的详细信息,可以为下面的问题提供答案。 Dalvik VM符合哪个版本的Java语言规范 ? 如果对(2)的回答是“第三版”,那么在本规范中Dalviks对Java存储器模型的支持有多完善呢? 特别是如何完成对volatilevariables语义的支持? 在Android的Double checked locking中 , fadden提供了以下注释: 对。 随着“易变”关键字的增加,这将工作在单处理器(所有版本的Android)和SMP(3.0“蜂窝”和更高版本) 这是否意味着具有双核CPU但只有Android 2.3的三星Galaxy SII可能会错误地执行并发代码? (当然,Galaxy仅仅是一个例子,问题在于Android 3.0平台之前的多核设备) 在Dalvik的内存模型中是否和Java一样? 法登提供了以下句子的答案: 目前没有任何Dalvik版本对于JSR-133来说是完全正确的 这是否意味着任何现有的正确的并发Java代码可能在发布此评论之前发布的任何Android版本上工作不正确? 更新#1:回答@ gnat的评论(太长,以至于评论) @gnat发表评论: @Alexey Dalvik不符合任何JLS版本,因为一致性要求传递不是Dalvik选项的JCK。 这是否意味着你甚至不能使用标准的Java编译器,因为它符合标准规范? 那很重要吗? 如果是的话,怎么样? 那么,我的问题是不明确的。 我的意思是, JLS不仅是Java编译器实现的规则,而且是任何JVM实现的隐含指导。 事实上,例如, JLS指出,某些types的读写是primefaces操作。 编译器编写器不是很有趣,因为读/写只是转换成一个操作码。 但对于任何应该正确实现这些操作码的JVM实现来说,这是非常重要的。 现在你应该看看我在说什么。 […]

在node.js中协调并行执行

node.js的事件驱动编程模型使协调程序stream程变得有些棘手。 简单的顺序执行变成了嵌套的callback,这很容易(尽pipe有点复杂的写下来)。 但是并行执行呢? 假设你有三个可以并行运行的任务A,B,C,当他们完成时,你想把结果发送给任务D. 用叉/join模式,这将是 叉子 叉B 叉C joinA,B,C,运行D 如何在node.js中写入? 有没有最佳做法或食谱? 我是否每次都必须手动推出解决scheme ,还是有一些图书馆有帮​​手?

Greenlet VS. 主题

我是gevents和greenlets的新手。 我发现了一些关于如何与他们合作的很好的文档,但是没有人给我说明我应该如何以及何时使用greenlet的理由。 他们真的擅长什么? 在代理服务器中使用它们是不是一个好主意? 为什么不是线程? 我不确定的是,如果它们基本上是共同的例程,它们如何为我们提供并发性。

NSOperation与大中央调度

我正在学习iOS的并发编程。 到目前为止,我已经读过NSOperation / NSOperationQueue和GCD 。 使用NSOperationQueue的原因是什么,反之亦然? 听起来像GCD和NSOperationQueue抽象的从用户显式创buildNSThreads 。 然而这两种方法之间的关系对我来说是不清楚的,所以任何反馈都要赞赏!

HttpClient是否可以安全使用?

在所有的例子中,我可以findHttpClient的用法,它用于一个closures的呼叫。 但是,如果我有一个持续的客户情况,可以同时提出几个请求呢? 基本上,一次调用2个线程的client.PostAsync对于HttpClient的同一个实例是安全的。 我并不是真的在这里寻找实验结果。 作为一个工作的例子可能只是一个侥幸(而且是一个持久的例子),一个失败的例子可能是一个configuration错误的问题。 理想情况下,我正在寻找HttpClient中并发处理问题的权威答案。

Eratosthenes素数比同时更快?

我目前正在编写一个程序,首先依次由Eratosthenes Sieve生成素数,然后同时进行。 该algorithm的并发版本应该比顺序版本更快,但在我的情况下,并发版本是约。 慢了10倍 我想知道我在哪里把额外的工作放在我的线程上,而不是顺序解决scheme中的主线程。 这是我的程序(准备阅读一下!): Primes.java : public abstract class Primes { byte[] bitArr; int maxNum; final int[] BITMASK = { 1, 2, 4, 8, 16, 32, 64 }; final int[] BITMASK2 = { 255 – 1, 255 – 2, 255 – 4, 255 – 8, 255 – 16, 255 – 32, 255 – […]

在JSF托pipebean中启动新线程安全吗?

我无法find一个明确的答案,以确定是否在会话范围内的JSF托pipebean中产生线程是安全的。 线程需要调用无状态EJB实例上的方法(dependency injection到托pipebean)。 背景是,我们有一个需要很长时间才能生成的报告。 这导致HTTP请求超时,因为我们无法更改服务器设置。 所以这个想法是开始一个新的线程,让它生成报告并暂时存储它。 同时,JSF页面显示一个进度条,轮询托pipebean直到生成完成,然后再次请求下载存储的报告。 这似乎工作,但我想确定我在做什么不是黑客。