java - 我如何知道/感觉到多线程对我的程序有帮助

标签 java multithreading performance

我有一个大型单线程java程序,需要很长时间才能输出结果。我正在考虑使其并发,但这让我想知道:并发对我的应用程序有帮助吗?真的有帮助吗?

因此,我在这里问:

Which properties I should look for (in my program) in order to say that multithreading/concurrency is the way to go?

这有什么规则吗?

最佳答案

只要您的程序可以分解为多个彼此独立的并行可执行任务,就应该使用多线程。 例如,

int main() {

for (i=0;i<5;i++)
   fprintf("this is for task1")  // consider this function is writing data to file for task1

for (i=0;i<5;i++)
   fprintf("this is for task2")  // consider this function is writing data to file for task2

return 0;
}

在这里我们可以看到,写入 file1 和 file2 可以并行完成,因为它们彼此完全独立。因此,这里可以使用多线程来同时运行这两个任务。

但是在多线程之前你应该考虑一些事情,

  1. 你真的需要它吗?这会妨碍您的应用程序逻辑吗?
  2. 如果不使用多线程,你能改进它吗?

    在上面的代码中,我们可以在不使用多线程的情况下进行一些改进,

    int main() {

    for (i=0;i<5;i++) {
       fprintf("this is for task1")
       fprintf("this is for task2")  
    }
    

    返回0; }

这里我们可以避免不需要的第二个循环。这里我们无法避免串行文件写入,但我们比以前有了一些改进(不要多想,这只是一个例子:))

  • 仅当您的 CPU 上有多个内核时,多线程才会有帮助,否则尽管您使用多线程,结果将与串行代码执行类似。
  • 希望你现在清楚了:)

    关于java - 我如何知道/感觉到多线程对我的程序有帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26879384/

    相关文章:

    java - Spring 集成 sftp :inbound-channel-adapter delete-remote-files=false

    asp.net - ASP.NET session 中的共享方法

    mysql - 有效地存储每个项目的最后 X 条记录

    java - weka 中模型的奇怪结果

    java - Android Studio : How do I get wrap_content + value?

    java - 不同的 Java 字节码反编译为完全相同的 p 代码和 java 代码

    java - Android Canvas 线程变得疯狂

    multithreading - 线程过多会导致颠簸吗?

    javascript - 如何在 Javascript 中使用 JSON 进行多维搜索?

    performance - 将几个 []byte 连接在一起的最快方法是什么?