【问题标题】:What kind of resources does a process or a thread require in JAVAJAVA中进程或线程需要什么样的资源
【发布时间】:2017-10-25 15:13:07
【问题描述】:

我遇到了说

的 Java 文档

进程和线程都提供了一个执行环境,但是 创建一个新线程比创建一个新线程需要更少的资源 过程。

参考:https://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html

在这种情况下,我们所说的资源究竟是什么意思?

EDIT1:

还有为什么RunnableThreads 快?

什么是通用资源?

两者使用的资源有什么区别?

【问题讨论】:

  • 这里有大约五个独立的问题。 Runnables 并不比 Threads 快。 “通用资源”并不意味着任何特别的东西。在您指定“两者”指的是什么之前,最后一个问题是没有意义的。太宽泛了。
  • @EJP 我的问题集中在他们每个人使用的资源上,而不是速度上。我知道有与why runnable are faster than threads 相关的问题,但我没有找到任何关于需要哪些资源的问题。
  • 您的问题是,我引用,“为什么RunnableThreads 快?”答案是它不是。
  • 在初始化方面。由于 runnable 比 Threads 需要更少的资源,因此它们更快。总的来说,它们只是函数,它们的执行取决于底层逻辑。我对吗 ?如果我不是,请纠正我
  • 他们更快。 如果您不将它们作为线程执行,它们会更快,这完全消除了拥有它们的全部意义。任何方法调用都比启动线程执行它要快,但是没有并行性,这实际上可能会使整个计算变慢。你的陈述没有本质意义。

标签: java multithreading


【解决方案1】:

产生一个新进程将创建一个新的 Java 虚拟机。

线程将在哪里共享内存、JVM 等。

JVM不是一个轻量级的程序,所以会消耗更多的内存等等

一些 JVM 是多进程的,允许多个进程共享一个 JVM。

来自问题中的链接教程: https://docs.oracle.com/javase/tutorial/essential/concurrency/procthread.html

一个进程通常有一套完整的、私有的基本运行时集 资源;特别是,每个进程都有自己的内存空间。

线程共享进程的资源,包括内存和打开的文件。这有助于高效但可能存在问题的沟通。


解决编辑 1。

首先让我们定义一些通用的计算术语。

操作系统概念

资源 来自https://en.wikipedia.org/wiki/System_resource

在计算中,系统资源或简称资源是任何物理资源 或计算机系统内可用性有限的虚拟组件。 每个连接到计算机系统的设备都是一种资源。每一个 内部系统组件是一种资源。虚拟系统资源 包括文件(具体的文件句柄),网络连接 (具体是网络套接字)和内存区域

流程 https://en.wikipedia.org/wiki/Process_(computing)

在计算中,进程是正在执行的计算机程序的一个实例。它包含程序代码及其当前活动。根据操作系统 (OS) 的不同,一个进程可能由多个同时执行指令的执行线程组成。

话题 https://en.wikipedia.org/wiki/Thread_(computing)

在计算机科学中,执行线程是可以由调度程序独立管理的最小程序指令序列,调度程序通常是操作系统的一部分。

Java 概念

流程

相对于 Java,进程通常运行单独的 JVM、不同的堆等。

线程

线程共享一个 JVM,并且能够访问相同的类和内存,但由于它们是 Java 之外的概念,与操作系统相关,因此交互/创建它们会产生开销。

可运行 - https://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html

Runnable 是一个仅包含在 Java 中的概念,操作系统不知道,它实际上只是一个带有名为 run 的方法的接口,但是您需要自己处理运行它。

将其从线程中抽象出来的原因是,涉及线程的类本身必须关注与底层操作系统绑定的兼容性,您的可运行对象不需要知道任何这些,它只是预期的代码在 Java 上下文中运行。

它实际上只是一个标记,向其他人表明您计划通过线程或其他形式的计划执行来运行它。

线程是外部概念,由操作系统管理,因此具有与内存、上下文切换等相关的成本。

进程的成本更高,并且具有不共享的独立程序内存。

【讨论】:

  • 是的,我明白了,但我的问题非常具体。使用的资源是什么。 https://en.wikipedia.org/wiki/Resource_(Java) 这就是线程使用的东西。
  • 这不是它所指的。这里使用的资源一词是它的通用版本,而不是特定的统一资源位置类型。
  • 查看 EDIT1
  • 那么,Runnable 资源是实现类的成员,而 Thread 资源是指 CPU 或正在使用的机器,并由操作映射系统而不是程序本身
【解决方案2】:

与环境相关的一切,如cpu、内存、磁盘、网络等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多