Java 中的进程与线程

2023-12-13

在我读过的问题中,我们建议使用线程而不是进程,因为线程更快。我决定为我的程序使用线程来编辑维基百科中某个类别中的文章。 该程序获取要编辑的文章列表,然后将文章分配给 10 个线程。通过这种方式,我每分钟可以进行 6-7 次编辑,其速度与我没有使用线程时的速度相同。当我启动程序的多个实例并为每个实例提供一个要处理的类别时,我发现每个进程每分钟可以进行 6-7 次编辑(我用 5 个进程进行了测试)。

为什么在我的例子中流程要快得多?为什么线程没有改变任何东西?

代码(不完整只是为了有一个想法):

 public static wiki = new Wiki();

 public process(){
      String[] articles = wiki.getArticles(category);

      for(int i=0; i< 10; i++){
            String[] part = getPart(articles, i, 10); 
            MyThread t = new MyThread(part);
            list.add(t);
      }
      ExecutorService.invokeAll(list); //I'm not sure about the syntax of the function
 }

public class MyThread extends Thread {
     public String[] articles ;

     public MyThread(String[] articles) {
         this.articles = articles;
     }

     public void run() {
         //some logic
         wiki.edit(...)
     }
} 

每个进程都有许多线程来完成其工作。如果你有一个带有 N 个线程的进程或 N 个带有 1 个线程的进程,则没有什么区别。

  • 线程的重量更轻,并且开销也稍微少一些。它们造成的差异以毫秒为单位,因此您不太可能在这里获益。
  • 使用更多进程,间接允许您的程序使用更多内存(因为每个进程都有有限的堆大小,您可以更改)如果您将有 N 个进程,公平的比较是将每个进程的内存限制为 1/N的内存量。
  • 更有可能发生的情况是,您在共享资源(如锁)上遇到了瓶颈。这意味着额外的线程几乎没有增加任何价值,因为您的程序无法有效地使用它们。通过使用多个进程,您可以断开线程之间的连接。

我看到每个进程每分钟可以进行 6-7 次编辑

每个编辑需要 10 秒,听起来相当长。也许值得使用 CPU 分析器来优化代码以提高性能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中的进程与线程 的相关文章

  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • 如何循环遍历所有组合,例如48 选择 5 [重复]

    这个问题在这里已经有答案了 可能的重复 如何在java中从大小为n的集合中迭代生成k个元素子集 https stackoverflow com questions 4504974 how to iteratively generate k
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • Spring AspectJ 在双代理接口时失败:无法生成类的 CGLIB 子类

    我正在使用Spring的
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 最小的有效 PDF 是多少?

    出于简单的好奇心 看到了最小的 GIF http probablyprogramming com 2009 03 15 the tiniest gif ever 最小的有效 PDF 文件是多少 这是一个有趣的问题 按照书本 你可以从以下开始
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • java.lang.IllegalStateException:应用程序 PagerAdapter 更改了适配器的内容,而没有调用 PagerAdapter#notifyDataSetChanged android

    我正在尝试使用静态类将值传递给视图 而不是使用意图 因为我必须传递大量数据 有时我会收到此错误 但无法找出主要原因是什么 Error java lang IllegalStateException The application s Pag
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • Android 中的处理程序与异步调用

    目前我正在使用处理程序来调用 Web 服务方法以使其在后台运行 问题是它需要更多的时间来给出响应 在性能方面似乎更昂贵 现在我计划使用异步调用 哪一个是最好的 Android 中的处理程序和异步调用有什么区别 请帮我想出一个最好的解决方案
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类

随机推荐

  • 该解决方案中信号量的使用是否正确?

    Problem 我必须增加 x1 和 x2 变量 这应该由单独的线程完成 并且在两个变量的上一个增量未完成之前不应调用两个变量的下一个增量 建议的解决方案 初始化 4 个信号量并调用单独的线程来单独递增变量 2 个信号量用于将消息传递到线程
  • C++/CX WinRT 指针的引用计数的线程安全

    我的印象是 考虑到用例 WinRT 对象的引用计数是线程安全的 但我遇到了一个错误 我不知道有什么其他方法可以解释 例如 以下代码很快就会崩溃 ref class C sealed public C virtual C Windows Fo
  • 带复选框的 Java 结果集到 JTable

    我有这段代码 它可以显示数据库中的数据 它运行良好 但我希望它在最后一列有复选框 我在这里找到了一些代码 但它仅适用于预定义的值 而不是来自数据库 如何向 JTABLE swing 添加复选框 截屏 Code public print in
  • Java 初学者 - 计算句子中的单词数

    我应该使用方法来计算句子中的单词数 我写了这段代码 但我不太确定为什么它不起作用 无论我写什么 我只收到 1 个字的计数 如果你能告诉我如何修复我写的内容而不是给我一个完全不同的想法 那就太好了 import java util Scann
  • 是否有“临时函数”之类的东西? [复制]

    这个问题在这里已经有答案了 有临时视图和临时表 是否有 临时函数 我有一个函数 我想在事务期间使用 然后丢弃 类似于临时表的用例 此外 我希望两个并发事务能够创建具有相同名称的相同函数 而无需锁争用 没有CREATE TEMP FUNCTI
  • SurfaceView 中带有 SimpleOnGestureListener 的 Android GestureDetector

    public class GameActivity extends Activity private static final String TAG GameActivity Override public boolean onTouchE
  • 如何在 Angular 中的本地存储中存储文件(2 及更高版本)

    我只想将图像或 pdf 或任何类型的文件存储在本地存储中 那么 有没有办法将文件存储在LocalStorage中呢 这是一个适用于 Angular 6 7 8 的独立服务 它在本地存储中下载 存储和检索文件 import Injectabl
  • 检测 Java 应用程序是否以 Windows 管理员身份运行

    我有一个 Java 应用程序 无论如何 我可以判断该进程是否在 Windows 7 上以管理员权限运行 我找到了一种似乎与平台无关的不同解决方案 它尝试编写系统首选项 如果失败 则该用户可能不是管理员 As 托马斯 扎托建议 您可能希望抑制
  • 使用改造上传文件时出现错误(没有此类文件或目录)

    我正在开发 Android 应用程序 我需要将带有文件的请求发布到服务器 我在用retrofit这样做 我这样做MultipartAPI 请求 然后我用Intent createChooser选择文件 当我这样做的时候问题就出现了enque
  • 使用 Storyboard 在 Mac sdk 中自定义字体

    如何在 Mac 应用程序开发中向情节提要添加自定义字体 我浏览了一些博客 并尝试添加字体书并使用故事板使用这种自定义字体开发一个 NStextfield 但这是系统相关的 我创建了 DMG 并安装在另一台计算机上 它使用默认字体 我以编程方
  • Android 列表视图填充内容的高度

    我在 xml 中定义了一个列表视图 现在我正在设置内容视图setContentView R layout topic layout 我里面有 5 个项目 目前它只填充列表视图高度的一半 但我希望它完全填充高度 这样我在底部就没有任何空间 我
  • 如何从文本文件中删除标点符号[重复]

    这个问题在这里已经有答案了 import collections import string with open cipher txt as f f f read replace replace n lower f f strip stri
  • “this”模块的源代码是做什么的?

    如果您打开 Python 解释器 然后输入 import this 如您所知 它会打印 Python 之禅 作者 Tim Peters 美丽总比丑陋好 显式的比隐式的好 简单总比复杂好 复杂总比复杂好 扁平比嵌套更好 稀疏比密集好 可读性很
  • 使用 Nexus REST API 获取给定 groupid/artifactId 的最新工件版本

    我正在尝试使用 nexus REST api 来获取最新版本的 Maven 工件 我可以使用浏览到我正在寻找的特定版本http repo local service local data index a local turbogears s
  • SQL JOIN AND OR 条件

    我有一张桌子说Cases 它使用来自的参考Workers对于三列 还有一张桌子Company工人属于哪个 下面是架构 Cases CaseID CaseNumber Worker1 Worker2 Worker3 Workers Worke
  • React 路由器在刷新后渲染组件

    这是一个奇怪的问题 但是当我尝试使用链接进行重定向时 什么也没有发生 只是 URL 发生了变化 但是当我刷新浏览器时 组件就会被渲染 我究竟做错了什么 My nav js import React from react import Nav
  • Lambda中使用的变量在计算总和时应该是最终的还是有效的最终?

    我有一张包含地图的地图 地图 gt 对于映射中的所有条目 我想计算特定键的总和 例如我的地图是这样的 Key1 Key2 Value A Z 10 10 B Z 40 10 C Y 20 10 我想基本上计算所有key2等于B的总和 所以在
  • 实际函数调用计数与 EXPECT_CALL(*mock, display()) 不匹配

    我正在打电话EXPECT CALL在模拟函数上display 但它返回运行时错误 Actual function call count doesn t match EXPECT CALL mock display output GTest
  • delphi编译器如何生成ResourceString标识符?

    我的问题是 当编译应用程序时 Delphi 编译器会生成数字标识符并将其分配给所有资源字符串 很少有文档说 当重新编 译应用程序时 会重新生成资源字符串的数字标识符 并且它们会警告依赖它 因为它可能会在之后发生变化再生 有很多第三方本地化工
  • Java 中的进程与线程

    在我读过的问题中 我们建议使用线程而不是进程 因为线程更快 我决定为我的程序使用线程来编辑维基百科中某个类别中的文章 该程序获取要编辑的文章列表 然后将文章分配给 10 个线程 通过这种方式 我每分钟可以进行 6 7 次编辑 其速度与我没有