标签: parallel-extensions

并行内连接

我想使用PLINQ在产品和类别之间执行内部联接。但是我不确定是否应该为这两个集合调用AsParallel方法。

// PLINQ  - Option 1
jointTables =     from c in Homework02.categories.AsParallel()
                  join p in Homework02.productList on c.Name equals p.Category
                  select new { Category = c, Product = p };

// PLINQ  - Option 2
jointTables = from c in Homework02.categories.AsParallel()
              join p in Homework02.productList.AsParallel() on c.Name equals p.Category
              select new { Category = c, Product = p };
Run Code Online (Sandbox Code Playgroud)

c# linq parallel-extensions plinq

3
推荐指数
1
解决办法
1422
查看次数

Parallel.Invoke对象列表的相同方法

我有一个MyClass类MyMethod.对于MyClass实例列表中的每个MyClass实例,我想调用MyMethod并让它们在单独的线程中运行.我正在使用.NET 4.0和Parallel扩展.

.net parallel-extensions

2
推荐指数
1
解决办法
433
查看次数

这是PLINQ错误吗?

为什么PLINQ输出与顺序处理和Parallel.For循环不同

我想添加10,000,000个数字的平方根.以下是3个案例的代码:

顺序循环:

double sum = 0.0;
for(int i = 1;i<10000001;i++)
sum += Math.Sqrt(i);
Run Code Online (Sandbox Code Playgroud)

输出为:21081852648.717

现在使用Parallel.For循环:

object locker = new object();
double total ;

Parallel.For(1,10000001,
()=>0.0,
(i,state,local)=> local+Math.Sqrt(i),
(local)=>
{
  lock(locker){ total += local; }
}
);
Run Code Online (Sandbox Code Playgroud)

输出为:21081852648.7199

现在使用PLINQ

double tot =  ParallelEnumerable.Range(1, 10000000)
                .Sum(i => Math.Sqrt(i)); 
Run Code Online (Sandbox Code Playgroud)

输出为:21081852648.72

为什么PLINQ输出和Parallel.For和Sequential for loop之间有区别?

parallel-processing parallel-extensions plinq task-parallel-library

2
推荐指数
1
解决办法
244
查看次数

使用多个有限数量的线程处理项目列表

基本上,我想要处理多个线程中的项目列表,而不是一次处理一个.我一次只想要有限数量的线程.这种方法有意义吗?使用全局变量进行线程计数是唯一的选择吗?(下面的伪代码)

foreach item in list
    while thread_count >= thread_max
        sleep
    loop
    start_thread item
    thread_count++
next

function start_thread(item)
    do_something_to item
    thread_count--
end function
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading parallel-extensions plinq

2
推荐指数
1
解决办法
1482
查看次数

是否有一个等同于TPL Parallel.Invoke的F#?

是否有一个等同于TPL Parallel.Invoke的F#?到目前为止,我所遇到的只是任务工厂,用于显式任务控制,但我在分析它时遇到了问题.

f# parallel-extensions task-parallel-library

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

如何等待并行Linq操作完成

我不确定我应该如何混合plinq和async-await.假设我有以下界面

public interface IDoSomething (
    Task Do();
}
Run Code Online (Sandbox Code Playgroud)

我有一个列表,我想并行执行,并能够await完成所有这些.

public async Task DoAll(IDoSomething[] doers) {
    //Execute all doers in parallel ideally using plinq and 
    //continue when all are complete
}
Run Code Online (Sandbox Code Playgroud)

怎么实现这个?我不知道如何从并行linq转到任务,反之亦然.

我对异常处理并不十分担心.理想情况下,第一个会触发并打破整个过程,因为我打算在出错时抛弃整个过程.

编辑:很多人都说Task.WaitAll.我知道这一点,但我的理解(除非有人能证明不是这样)是因为它不能主动将你的东西并行化到多个可用的处理器核心.我特别要问的是双重的 -

  1. 如果我await一个Task一个PLINQ行动中确实是摆脱由于日程安排一个新的线程有很多的优势的?

  2. 如果我doers.AsParallel().ForAll(async d => await d.Do())平均需要大约5秒钟,那么在此期间我怎么不旋转调用线程呢?

c# linq parallel-extensions task-parallel-library async-await

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

与有限订阅者同时订阅可观察集合的简单方法

我一直在尝试使用Rx和可观察集合实现一个简单的生产者 - 消费者模式.我还需要能够轻松限制用户数量.我在并行扩展中看到过很多对LimitedConcurrencyLevelTask​​Scheduler的引用,但我似乎无法使用多个线程.

我想我做的很傻,所以我希望有人可以解释一下.在下面的单元测试中,我希望使用多个(2)线程来使用阻塞集合中的字符串.我究竟做错了什么?

[TestClass]
public class LimitedConcurrencyLevelTaskSchedulerTestscs
{
    private ConcurrentBag<string> _testStrings = new ConcurrentBag<string>();
    ConcurrentBag<int> _threadIds= new ConcurrentBag<int>();

    [TestMethod]
    public void WhenConsumingFromBlockingCollection_GivenLimitOfTwoThreads_TwoThreadsAreUsed()
    {

        // Setup the command queue for processing combinations
        var commandQueue = new BlockingCollection<string>();

        var taskFactory = new TaskFactory(new LimitedConcurrencyLevelTaskScheduler(2));
        var scheduler = new TaskPoolScheduler(taskFactory);

        commandQueue.GetConsumingEnumerable()
            .ToObservable(scheduler)
            .Subscribe(Go, ex => { throw ex; });

        var iterationCount = 100;
        for (int i = 0; i < iterationCount; i++)
        {
            commandQueue.Add(string.Format("string {0}", i));
        }
        commandQueue.CompleteAdding();

        while (!commandQueue.IsCompleted)
        {
            Thread.Sleep(100); …
Run Code Online (Sandbox Code Playgroud)

c# concurrency observablecollection parallel-extensions system.reactive

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

Java并行编程

我需要在我的多核桌面上并行化CPU密集型Java应用程序,但我对线程编程不太满意.我看了Scala,但这意味着要学习一种非常耗时的新语言.我还看了Ateji PX Java并行扩展,看起来很容易使用,但还没有机会评估它.有人会推荐吗?欢迎其他建议.

在此先感谢您的帮助

法案

java parallel-processing multithreading multicore parallel-extensions

0
推荐指数
1
解决办法
847
查看次数