标签: threadpool

使用单个取消令牌添加中止所有任务

我收到了一项可以同时执行多项任务的服务。我被分配添加一个中止选项,该选项应该结束所有当前正在运行的任务。因为系统已经实现,所以将 CancellationTokenSource 传递给每个任务是有问题的,所以我所做的是创建一个所有任务都会侦听取消的单个令牌。当中止接收时,该令牌将发送取消,然后将创建一个新的 CancellationTokenSource 实例。我无法验证所有任务,直到中止之前结束在 启动 CancellationTokenSource 的新实例

几个问题:

  1. 起初我以为 TokenSource.Cancel() 只是一个发送的事件,但它似乎被卡在“高位”,所以任何具有相同令牌的新任务也会收到取消,是真的吗?

  2. 理想情况下,每个任务都有自己的取消令牌(对吗?),问题是谁需要持有该令牌?谁调用了该任务或任务本身?因为一旦发送取消,我将需要永远保留该令牌,因为我无法判断任务何时到达退出点。

  3. 是否有一种已经实现的方法来监视所有当前正在运行的任务,以便在发送取消时我将确保在允许任何新任务之前所有任务都已结束?我使用信号量做到了这一点,但它看起来像是一个糟糕的解决方案。

对于新手问题,我很抱歉,我已经实现了我需要的内容并且它有效,但质量远低于标准,我希望以正确的方式改进它。

.net c# multithreading threadpool cancellationtokensource

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

如何动态锁定线程并避免竞争条件

我正在尝试动态锁定线程,但无论我尝试什么,总会发生某种竞争条件,这似乎是由多个线程同时启动任务引起的,但我一直无法找到一个好的答案这。

这是一个例子:

using System.Linq;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
public static readonly Object padLock = new Object();
public readonly static ConcurrentDictionary<string, object> locks = new 
ConcurrentDictionary<string, object>();
public static List<string> processes = new List<string>();

public static void Main()
{
  //Add random list of processes (just testing with one for now)
  for (var i = 0; i < 1; i++) {
     processes.Add("random" + i.ToString()); 
  }

  while (true)
  {
     foreach (var process in processes )
     {
        var currentProc = …
Run Code Online (Sandbox Code Playgroud)

c# parallel-processing multithreading thread-safety threadpool

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

Python - 用 1 个线程运行多个函数

我是 Python 新手。我正在尝试做某事,但不确定是否可能。我想创建一个运行 1 个函数的线程,并在完成后运行另一个函数。

例如

thread.start_new_thread( func1 )
//Run this thread only after the first one was finished
thread.start_new_thread( func2 )
Run Code Online (Sandbox Code Playgroud)

是否可以用 1 个线程来完成?或者我需要创建 2 个线程?我应该怎么办?

python multithreading thread-safety threadpool

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

Java Thread随机输出

public class Rough {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        TestThread1 testThread1 = new TestThread1();
        TestThread2 testThread2 = new TestThread2();
        testThread1.start();
        testThread2.start();
        // testThread1.stop();
        System.out.println(testThread1.getName());
        System.out.println(testThread2.getName());
    }

}

class TestThread1 extends Thread {

    public void run() {
        System.out
                .println("MyThread1 running :: " + System.currentTimeMillis());
    }
}

class TestThread2 extends Thread {

    public void run() {
        System.out
                .println("MyThread2 running :: " + System.currentTimeMillis());
    }
}
Run Code Online (Sandbox Code Playgroud)

它每次执行时都会给出随机输出.

Thread-0
Thread-1
MyThread1 running :: …
Run Code Online (Sandbox Code Playgroud)

java multithreading threadpool

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

一台机器上可以存在多少个线程池?

从理论上讲,似乎单个机器上可以有多个线程池,但.Net框架每台机器只有一个线程池,即使机器有多个处理器也是如此.这个陈述是真的吗?

更新1:

根据Tim的评论,答案是每个进程将有一个.Net线程池.因此,如果在一台计算机上运行多个进程,则该计算机上可以存在多个.Net线程池.

c# threadpool

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

使用Java定期调用方法

我需要定期调用一个方法而不使用Timer类.该方法将由多线程调用.

java multithreading timer executorservice threadpool

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

Go提供与Threadpool等效的功能吗

我来自Java / Scala,最近开始使用Go。在Java / Scala中,线程池非常普遍,并且至少有四个不同的原因将使用它们。

  1. 重用工人已经实例化
  2. 资源管理。当我们有多个线程池时,我们可以确保如果系统的某个部分中发生了突发,那么它不会阻止其他部分的运行。
  3. 自定义我们想要的计划类型(分叉/联接,经典,计划等)
  4. 自定义拒绝策略。

由于Goroutine是如此轻便,因此不需要1,即使提供一个很好,我们也可以创建某种类型的工作程序池而无需过多地麻烦解决2

但是,我觉得在Go中我们不能处理34

是因为不需要它还是仅仅是缺少功能?

concurrency go threadpool goroutine

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