小编Bry*_*yce的帖子

Javascript中的倒圆括号

什么是Javascript,让我在这样的函数调用中使用反转/反向括号?我在CLI上运行Node控制台; 特别是节点版本0.10.25.

function a(){ return 42 }
a() // -> 42
a)( // -> 42.  WTF?

function b(t){ return t }
b(4) // -> 4
b)4( // No function evaluation; presumably dangling parentheses
b)(4 // -> 4.  WTF?
Run Code Online (Sandbox Code Playgroud)

附录:这似乎不适用于Chrome 33.0.1750.152,Safari 7.0.2或Firefox 27.01.这实际上是某种ECMAScript解释的"特征",还是Node的特殊性?如果Node正在使用V8,那么它是否应该与Chrome结果匹配?

javascript node.js

33
推荐指数
1
解决办法
732
查看次数

针对兰德流的高性能缓冲

我的代码消耗了大量(当前数百万,最终数十亿)相对较短(5-100个元素)的随机数阵列,并对它们进行了一些非常非常费力的数学运算.随机数是,随机的,理想情况下我想在多个核心上生成它们,因为随机数生成大约是我的运行时分析的50%.但是,我很难以一种不比单线程方法慢的方式分发大量小任务.

我的代码目前看起来像这样:

for(int i=0;i<1000000;i++){
    for(RealVector d:data){
        while(!converged){
            double[] shortVec = new double[5];
            for(int i=0;i<5;i++) shortVec[i]=rng.nextGaussian();
            double[] longerVec = new double[50];
            for(int i=0;i<50;i++) longerVec[i]=rng.nextGaussian();
            /*Do some relatively fast math*/
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我采取的方法没有奏效的是:

  • 1+个线程填充ArrayBlockingQueue,我的主循环消耗并填充数组(装箱/取消装箱在这里是杀手)
  • 在执行数学的非依赖部分时生成具有Callable(产生未来)的向量(看起来间接的开销超过了我获得的任何并行性增益)
  • 使用2个ArrayBlockingQueue,每个由一个线程填充,一个用于short,一个用于长数组(仍然大约是直接单线程情况的两倍).

我不是在寻找解决我特定问题的"解决方案",而是如何处理并行生成大型小型独立基元流并从单个线程中消耗它们的一般情况.

java concurrency performance multithreading equation

7
推荐指数
2
解决办法
252
查看次数

可变参数模板:生成一对相邻元素的元组

我的目标是做一些事情,例如,

pairs<1,2,3,4>()
Run Code Online (Sandbox Code Playgroud)

有退货类型

std::tuple<some_other_type<1,2>, some_other_type<2,3>, some_other_type<3,4>>
Run Code Online (Sandbox Code Playgroud)

我想知道这是否可能与C++模板元编程,以及如何实现它.为了实际生成该值,似乎我可以使用tuple_cat递归地连接到输出,但我发现很难表达返回类型,因为它本身是可变参数并且实际上是模板参数数量的函数.使情况复杂化,如果我去了tuple_cat路由,似乎我也必须重载函数以使元组连接到,并且连接将在运行时发生,而不是编译时.我在野鹅追逐吗?

c++ templates variadic-templates c++11

7
推荐指数
2
解决办法
663
查看次数

等待不确定数量的goroutines

我有一个代码,其中一个goroutine会触发不确定数量的儿童goroutine,这反过来会触发更多goroutines等等.我的目标是等待所有的儿童goroutine完成.

我不知道我将提前解雇的goroutines的总数,所以我不能使用sync.WaitGroup,理想情况下我不必人为地限制通过channel-as-semaphore模式运行的goroutines总数.

简单地说,我想在每个goroutine中都有一个本地通道或等待组作为等待其所有子节点的信号量,但这会导致每个goroutine都在消耗堆栈空间,而它的所有后代都完成了.

现在我的想法是在goroutine被触发时增加原子计数器(在父节点中,以避免在父节点完成后子节点开始运行时虚假地击中零),在goroutine结束时减少它,并定期检查它是否相等为零.

我基本上是在正确的轨道上,还是有一个更优雅的解决方案?

go

6
推荐指数
1
解决办法
1222
查看次数

什么时候AsynchronousFileChannel写"完成"?

在Java中,当一个调用AsynchronousFileChannel.write(...)一个接收a时Future,哪个可以等待完成Future.get().

当该get()调用返回时,写入是写入磁盘还是只写入页面缓存?

如果重要的话,我很好奇的特定平台是Linux和ext4.

java asynchronous nio

6
推荐指数
1
解决办法
262
查看次数