gpt4 book ai didi

c# - 向任务发送消息

转载 作者:太空宇宙 更新时间:2023-11-03 21:41:49 24 4
gpt4 key购买 nike

我正在编写一个程序,根据用户提供的某些条件显示 mandelbrot 集。由于计算时间较长(超过 500 毫秒),我决定使用多个线程。没有任何以前的经验,我已经设法通过使用 System.Threading.Tasks 类来完成它,它工作得很好。我唯一不喜欢的是每次生成 mandelbrot 时,都会创建然后销毁线程

这是它如何工作的一个例子。每次调用该方法时,它都会创建线程(任务)。

for (int i = 0; i < maxThreads; i++) {
int a = i;
tasks[a] = Task.Factory.StartNew(() => generateSector(a));
}

我真的不知道这对性能有何影响,但看起来创建和销毁线程非常耗时,而且让线程准备好并等待触发消息会更有效率,当他们完成后回到那个等待状态。可能以下示例代码有助于理解这个想法。

for (int i = 0; i < maxThreads; i++)
tasks[i].sendMessage("Start"); // Tells the running thread to begin its work

所以每个线程都会执行一个无限循环,在这个循环中等待直到它们被要求进行计算。然后,它将继续等待。像这样:

// Into the method that a thread executes
while(true) {
Wait(); // Waits for the start signal
calculate(); // Do some calculations
} // Go back to waiting

这样会更有效率吗?有什么办法吗?

最佳答案

保留您的代码。

1)Tasks使用ThreadPool线程,所以没有问题

2) “我真的不知道这对性能有何影响”——这是你应该开始的地方。永远不要在测量前优化。你有性能问题吗?您的代码运行缓慢吗?我想不会,所以你不应该被打扰。

关于c# - 向任务发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18983597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com