标签: threadpool

线程过多时延迟或不执行函数

我有一个基于 Java 的游戏服务器。1个用户需要使用2个线程来发送和接收数据。但是每当线程达到200-300个线程时,执行数据的功能就不再起作用了。服务器的CPU、RAM还没有满,大约只有15-20%。我尝试在用户断开连接时使用“垃圾收集器”,但这种情况仍然发生。谢谢你的帮助。抱歉我的英语不好。

java multithreading threadpool

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

为什么线程池在debug-build-run中以2个线程开始?

代码 :

public class Test
{
    public static void Main()
    {
        int threadCount = ThreadPool.ThreadCount;
        Console.WriteLine($"thread count : {threadCount}");
        
        ThreadPool.SetMinThreads(1, 2);
        Console.WriteLine(ThreadPool.SetMaxThreads(1, 2));
        
        List<Task> tlist = new();
        
        for (int i = 0; i < 3; i++)
        {
            Console.WriteLine($"repeat {i}");
            
            tlist.Add(Task.Run(() =>
            {
                threadCount = ThreadPool.ThreadCount;
                Console.WriteLine($"thread count : {threadCount}");
                return FuncAsync();
            }));
            Console.WriteLine($"repeat end {i}");
        }

        Task.WaitAll(tlist.ToArray());
    }

    public static async Task FuncAsync()
    {
        Console.WriteLine("FuncAsync");
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码仅在使用“发布”构建“运行”时才起作用。

调试 跑步
调试构建 工作 不工作
发布版本 工作 工作

截屏

首先,对不起我的英语能力......

我想知道当线程池的最大容量为 1 时异步方法如何工作。但是我遇到了一些意外的错误。 …

c# debugging multithreading asynchronous threadpool

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

ThreadPool参数

在我将它放入我的应用程序之前,我正在测试一个简单的线程池解决方案,但我看到的结果对我来说没有意义.我有一个简单的表单,上面有一个按钮.此按钮启动以下循环:

private void button1_Click(object sender, EventArgs e)
{
    MyTestThread oTask = new MyTestThread ();
    MyThreadInfo oTaskParameters = new MyThreadInfo();
    for (int i = 1; i <= 5; i++)
    {
        objTaskParameters.MyGuid = Guid.NewGuid();
        objTaskParameters.MyNumber = i;
        ThreadPool.QueueUserWorkItem(new WaitCallback(objTask.ProcessDataForNTime), objTaskParameters);
    }
    Console.WriteLine("All threads have been queued for processing...");
}
Run Code Online (Sandbox Code Playgroud)

它正在调用的类看起来像这样.它有一个参数MyThreadInfo类,然后MyTestThread类在完成之前循环10秒.

public class MyThreadInfo
{
    public int MyNumber;
}

public class MyTestThread 
{
    public void ProcessDataForNTime(Object oParameters)
    {
        //We pass parameters
        MyThreadInfo oThread = (MyThreadInfo)oParameters;
        int threadNo = oThread.MyNumber;

        Console.WriteLine("thread {0} started...", threadNo); …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading threadpool

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

提升线程池

我正在尝试使用boost线程池库创建一个线程池,但在定义它时,我不断收到很多关于模板参数错误的错误.

我可能做了一些根本错误的事情,但我没有看到它?

//Threadpool
typedef boost::threadpool::thread_pool<
    boost::threadpool::task_func,
    boost::threadpool::fifo_scheduler<tsk>,
    boost::threadpool::static_size<boost::threadpool::fifo_pool>,
    boost::threadpool::resize_controller<boost::threadpool::fifo_pool>,
    boost::threadpool::wait_for_active_tasks<boost::threadpool::fifo_pool>
>  pool;
Run Code Online (Sandbox Code Playgroud)

错误:

------ Build started: Project: Trial, Configuration: Debug Win32 ------

Compiling...
Trial.cpp
error C2923: 'boost::threadpool::fifo_scheduler' : 'tsk' is invalid as template argument '#1', type expected
       see declaration of 'tsk'
 error C3200: 'boost::threadpool::fifo_pool' : invalid template argument for template parameter 'SizePolicy', expected a class template
error C3200: 'boost::threadpool::resize_controller<Pool>' : invalid template argument for template parameter 'SizePolicyController', expected a class template
        with
        [
            Pool=boost::threadpool::fifo_pool
        ]
error C3200: 'boost::threadpool::wait_for_active_tasks<Pool>' : invalid …
Run Code Online (Sandbox Code Playgroud)

c++ boost threadpool

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

Java线程创建跟踪

我有一个Java应用程序,重点关注并发性和可突发容量.这意味着它使用线程池来排队和执行事件.

所有这些线程池都是固定大小的,但是当应用程序部署在Linux(CentOS 5.5)服务器上时,我经常发现自己遇到了打开文件描述符限制.

据我所知,应用程序在加载时,任何时候都不应该创建超过20个线程,但我的命中ulimit率为1024.

有没有什么办法可以跟踪这些线程回到创建它们的代码/池?

java linux multithreading centos5 threadpool

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

Java-将完成的线程对象分配给新线程

好吧,标题的措辞有点奇怪,但我真的不知道如何表达它.基本上,从我对Java和线程的理解是你创建一个线程,它运行,它死了.但是,线程OBJECT仍然存在.如果这样的事情有效,我想知道什么

int numWorkers = Integer.parseInt(args[0]);
int threadPoolSize = Integer.parseInt(args[1]);
ExecutorService tpes = Executors.newFixedThreadPool(threadPoolSize);
WorkerThread[] workers = new WorkerThread[numWorkers];
while(some condition)    
    for (int i = 0; i < numWorkers; i++) {
        workers[i] = new WorkerThread(i, *some changing parameters*);
        tpes.execute(workers[i]);
    }
Run Code Online (Sandbox Code Playgroud)

基本上这种情况是我们有一些条件,我们不知道何时会满足.假设我使用8个线程.我创建所有8个线程,他们做他们的事情并返回.我把他们的结果放在一起,意识到我还没有完成.但是,例如,worker [0]已经存在.我用一个新的WorkerThread()调用创建了它.但它现在已经死了,因为它已经完成了.如果我打电话,AGAIN,工人[0] =新的WorkerThread(0,新参数)......是允许的吗?我需要更多线程,我已经有一个已经(现在)死线程的数组......我可以将它们指向其他东西吗?GC是否正确收集旧线程?

java multithreading threadpool

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

如何在ThreadFactory中创建线程期间访问Runnable?

我有一个ThreadPoolExecutor我用自定义创建的ThreadFactory.当我调用execute()传递my 的方法时Runnable,Thread使用我的自定义创建一个new ThreadFactory.问题是我无法找到一种方法来访问里面的信息Runnable.

例如,我有一个Job实现的类Runnable.在里面Job,我有一个属性A,我想在newThread()我的自定义方法中访问ThreadFactory.问题是我不能将Runnable传递的as参数转换为,Job因为它不是一个Job实例,它是ThreadPoolExecutor.Worker类的一个实例,而这个类是private.

java threadpool

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

JAVA中ThreadPool的示例

任何人都可以给我一个简单的例子,我们已经创建了自己的threadpool类来更好地感受线程.我不想使用java中提供的Executor Service.我的意思是线程池的任何内置类.

谢谢

java threadpool

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

如何在java中运行一个线程,让我知道另一个线程何时死亡?

假设我在java中有一个线程A. 这个线程继续执行一些任务A.我有另一个线程B,只有在任务A完成后才能执行任务B. 我如何在Java中实现它?

java multithreading threadpool

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

ASP.NET多线程

我希望利用在我的网站上运行多个线程.

在这种情况下,我有一个任务,我需要向多个用户发送电子邮件.我必须考虑一次可能发送100封电子邮件的事实.

我不想要的是,最终用户要等待发送这些电子邮件,这需要太长时间.我想要做的是在单独的线程上发送这些电子邮件,以便我当前的页面可以继续处理页面.

这个想法是用户不需要等待这些电子邮件被解雇和完成,没有消息告知用户电子邮件已经成功发送,这只是在后台完成的事情.

用户只需要能够在系统使用时进行遗忘.

我的问题是,处理这个问题的最佳方法是什么.

我应该考虑使用线程池,还是使用异步方法更好?

任何意见,将不胜感激.

c# asp.net asynchronous threadpool

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

标签 统计

threadpool ×10

java ×6

multithreading ×6

c# ×3

asynchronous ×2

.net ×1

asp.net ×1

boost ×1

c++ ×1

centos5 ×1

debugging ×1

linux ×1