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 中的进程与线程 的相关文章

  • 如何使用 JAVA 代码以编程方式捕获线程转储?

    我想通过 java 代码生成线程转储 我尝试使用 ThreadMXBean 为此 但我没有以正确的格式获得线程转储 因为我们正在使用jstack命令 请任何人提供一些帮助 他们是否有其他方式获取线程转储 使用任何其他 API 我想要的线程转
  • HAProxy SSL终止+客户端证书验证+curl/java客户端

    我希望使用我自己的自签名证书在 HAProxy 上进行 SSL 终止 并使用我创建的客户端证书验证客户端访问 我通过以下方式创建服务器 也是 CA 证书 openssl genrsa out ca key 1024 openssl req
  • 将SQL数据引入jquery availabletag

    我正在尝试制作自动完成文本框 但如何将 SQL 数据包含到 jquery 可用标记并循环它 我无法根据以下代码执行该功能 任何帮助 将不胜感激 谢谢 这是我的预期输出 预期结果演示 http jsfiddle net VvETA 71 jq
  • 文本在指定长度后分割,但不要使用 grails 打断单词

    我有一个长字符串 需要将其解析为长度不超过 50 个字符的字符串数组 对我来说 棘手的部分是确保正则表达式找到 50 个字符之前的最后一个空格 以便在字符串之间进行彻底的分隔 因为我不希望单词被切断 public List
  • 埃拉托色尼筛法 - 实现返回一些非质数值?

    我用 Java 实现了埃拉托斯特尼筛法 通过伪代码 public static void sieveofEratosthenes int n boolean numArray numArray new boolean n for int i
  • 为自定义驱动程序创建 GraphicsDevice

    我正在开发一个在嵌入式系统中使用 Java 的项目 我有用于屏幕和触摸输入的驱动程序 以及用于文本输入的虚拟键盘 我的屏幕驱动程序有一个Graphics2D您可以绘制的对象和repaint Rectangle 更新方法 类似地 触摸驱动器能
  • 为什么Iterator接口没有add方法

    In IteratorSun 添加了remove 方法来删 除集合中最后访问的元素 为什么没有add方法来向集合中添加新元素 它可能对集合或迭代器产生什么样的副作用 好的 我们开始吧 设计常见问题解答中明确给出了答案 为什么不提供 Iter
  • 如何检测图像是否像素化

    之前有人在 SO 上提出过这样的问题 在Python中检测像素化图像 https stackoverflow com questions 12942365 detecting a pixelated image in python还有关于q
  • 是否可以从 servlet 内部以编程方式设置请求上下文路径?

    这是一个特殊情况 我陷入了处理 企业 网络应用程序的困境 企业应用程序正在调用request getContext 并将其与另一个字符串进行比较 我发现我可以使用 getServletContext getContextPath 获取 se
  • 关于逻辑/算法的想法以及如何防止线程写入 Sql Server 中的竞争

    我有以下逻辑 public void InQueueTable DataTable Table int incomingRows Table Rows Count if incomingRows gt RowsThreshold async
  • Java、Spring:使用 Mockito 测试 DAO 的 DataAccessException

    我正在尝试增加测试覆盖率 所以我想知道 您将如何测试 DAO 中抛出的 DataAccessExceptions 例如在一个简单的 findAll 方法中 该方法仅返回数据源中的所有数据 就我而言 我使用 Spring JdbcTempla
  • Java:如何确定文件所在的驱动器类型?

    Java 是否有一种独立于平台的方法来检测文件所在的驱动器类型 基本上我有兴趣区分 硬盘 可移动驱动器 如 USB 记忆棒 和网络共享 JNI JNA 解决方案不会有帮助 可以假设 Java 7 您可以使用 Java 执行 cmd fsut
  • 在 Clojure 中解压缩 zlib 流

    我有一个二进制文件 其内容由zlib compress在Python上 有没有一种简单的方法可以在Clojure中打开和解压缩它 import zlib import json with open data json zlib wb as
  • Karaf / Maven - 无法解决:缺少需求 osgi.wiring.package

    我无法在 Karaf 版本 3 0 1 中启动捆绑包 该包是使用 Maven 构建的并导入gson http mvnrepository com artifact com google code gson gson 2 3 1 我按照要求将
  • IntelliJ 组织导入

    IntelliJ 是否具有类似于 Eclipse 中的组织导入功能 我拥有的是一个 Java 文件 其中多个类缺少导入 例子 package com test public class Foo public Map map public J
  • 什么是竞争条件?

    编写多线程应用程序时 最常见的问题之一是竞争条件 我向社区提出的问题是 竞赛条件是什么 你如何检测它们 你如何处理它们 最后 如何防止它们发生 当两个或多个线程可以访问共享数据并且它们试图同时更改它时 就会出现竞争条件 由于线程调度算法可以
  • Lombok @Builder 不创建不可变对象?

    在很多网站上 我看到 lombok Builder 可以用来创建不可变的对象 https www baeldung com lombok builder singular https www baeldung com lombok buil
  • 如何在多线程应用程序中安全地填充数据并 Refresh() DataGridView?

    我的应用程序有一个 DataGridView 对象和一个 MousePos 类型的列表 MousePos 是一个自定义类 它保存鼠标 X Y 坐标 类型为 Point 和该位置的运行计数 我有一个线程 System Timers Timer
  • Hadoop NoSuchMethodError apache.commons.cli

    我在用着hadoop 2 7 2我用 IntelliJ 做了一个 MapReduce 工作 在我的工作中 我正在使用apache commons cli 1 3 1我把库放在罐子里 当我在 Hadoop 集群上使用 MapReduceJob
  • GCD 与自定义队列

    我想知道这两者的性能有什么区别 dispatch async dispatch get global queue DISPATCH QUEUE PRIORITY HIGH 0 perform complex operation dispat

随机推荐

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

    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 次编辑 其速度与我没有