轻量级进程和线程有什么区别?

2024-01-31

我找到了问题的答案here http://wiki.answers.com/Q/What_is_the_difference_between_LWP_and_threads。但我不明白答案中的一些想法。例如,据说轻量级进程与其他进程共享其逻辑地址空间。这是什么意思?我可以理解 2 个线程的相同情况:它们共享一个地址空间,因此它们都可以从 bss 段读取任何变量(例如)。但是我们有很多不同的进程,有不同的 bss 部分,我不知道如何共享它们。


我不确定这里的答案是否正确,所以让我发布我的版本。

进程-LWP(轻量级进程)和用户线程之间是有区别的。我将把流程定义放在一边,因为这或多或少是众所周知的,并且重点关注LWP vs user threads。 LWP 本质上就是今天所说的线程。最初,用户线程是指由应用程序本身管理的线程,内核对此一无所知。 另一方面,LWP 是内核调度和执行的单位。

例子: 假设系统有 3 个其他进程正在运行,并且调度是循环的,没有优先级。您有 1 个处理器/核心。

Option 1。您有 2 个用户线程使用一个 LWP。这意味着从操作系统的角度来看,您有一个调度单元。总共有 4 个 LWP 正在运行(另外 3 个 + 你的 1 个)。您的 LWP 获得总 CPU 时间的 1/4,并且由于您有 2 个用户线程,因此每个线程获得总 CPU 时间的 1/8(取决于您的实现)

Option2。你有 2 个 LWP。从操作系统的角度来看,您有两个调度单元。总共有 5 个 LWP 正在运行。您的 LWP 获得总 CPU 时间的 1/5,而您的应用程序获得 CPU 的 2/5。

另一个粗略的区别 - LWP 有 pid(进程 ID),而用户线程没有。

由于某种原因,命名有点混乱,我们将 LWP 称为线程。

肯定还有更多差异,但请参阅幻灯片。http://www.cosc.brocku.ca/Offerings/4P13/slides/threads.ppt http://www.cosc.brocku.ca/Offerings/4P13/slides/threads.ppt

EDIT:

发帖后,我发现了一篇好文章,它更详细地解释了所有内容,而且英语比我写的更好。http://www.thegeekstuff.com/2013/11/linux-process-and-threads/ http://www.thegeekstuff.com/2013/11/linux-process-and-threads/

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

轻量级进程和线程有什么区别? 的相关文章

  • 未从线程接收位置数据

    我尝试使用计时器经常发送包含用户位置的短信 最初 我遇到了空指针异常 这是由于我犯了一个简单的错误 一旦解决了这个问题 一切似乎都运行良好 但是 它永远不会获取我的位置 因此 不断发送的文本显示 无法接收位置 我想问的是为什么它无法获取我的
  • Time 方法在另一个线程中执行并在超时时中止

    您好 我正在尝试异步运行方法 以便计算持续时间并在超过超时时取消该方法 我尝试使用异步和等待来实现这一点 但没有运气 也许我过度设计了这个 任何输入都会受到赞赏 应该注意的是 我无法更改接口 TheirInterface 因此得名 到目前为
  • Android 上的多处理

    我一直在 Android 上执行一些测试 以验证并行化算法 如 FFT 的性能可以提高多少 我通过使用带有 JNI FFTW 的 pthread 和 Java 线程 来自 JTransforms 来实现这些算法 我没有像预期那样通过使用线程
  • 多线程调试技术

    我想知道是否有人知道多线程应用程序调试技术的一个很好的调查 理想情况下 我正在寻找基于案例的分析 死锁 饥饿 损坏的共享状态 Net 特定的或通用的 我不知道有哪篇文章或书籍可以满足您的需求 因此这是我从 12 年 Windows 多线程调
  • Python GIL 防止多核机器中 CPU 使用率超过 100%?

    许多参考文献都说 Python GIL 降低了多核机器中多线程代码的性能 因为每个线程在执行之前都需要获取 GIL 换句话说 看起来GIL实际上是将多线程Python程序变成了单线程模式 例如 1 线程A获得GIL 执行一段时间 释放GIL
  • 多个线程访问一个变量

    我在正在读的一本教科书中发现了这个问题 下面也给出了解决方案 我无法理解最小值怎么可能是 2 为什么一个线程不能读取 0 而所有其他线程都执行并写入 1 而无论是1还是2 最后写入的线程仍然必须完成自己的循环 int n 0 int mai
  • XCode std::thread C++

    对于学校的一个小项目 我需要创建一个简单的客户端 服务器结构 它将在路由器上运行 使用 openWRT 并且我试图在这个应用程序中使用线程做一些事情 我的 C 技能非常有限 所以我在internet https stackoverflow
  • 将带有 **kwargs 错误的值线程化并传递给 TypeError

    我对 Python 还很陌生 并且正在通过这篇文章研究如何使用线程来处理某些代码 Python 使用线程或队列迭代调用函数的 for 循环 https stackoverflow com questions 12868956 python
  • 依赖于不同队列上的另一个操作的 NSOperation 无法启动

    我有操作的依赖图 并且使用多个队列来组织各种操作流 例如 peopleQueue sitesQueue sessionQueue sessionQueue loginOp fetchUpdatedAccountOp peopleQueue
  • 父进程和子进程如何进行信号量操作?

    semget 调用是否在父进程和子进程之间共享信号量 我有这段代码 对于相同的代码 我观察到如果父进程首先运行 子进程有时会获得更改后的信号量值 但是当子进程首先运行时 父进程似乎永远不会携带更改后的信号量 为什么会发生这种情况 谁能向我解
  • 使用 pthread_cond_signal 优雅地终止线程被证明是有问题的

    我需要发射一堆线程 并希望优雅地将它们拉下来 我正在尝试使用pthread cond signal pthread cond wait实现这一目标 但遇到了问题 这是我的代码 首先是thread main static void thrma
  • java:如何设置全局线程ID?

    是否有可能为线程设置唯一ID 在分布式系统中 线程是在许多不同的机器上创建的 例如通过 RMI 我需要它来创建日志消息 根据我的研究 我知道可以使用 log4j mdc ndc 来完成 但只能在单线程中完成 我的问题是 在创建线程时必须设置
  • Python - 如何实现“可停止”线程?

    已经发布解决方案了here https stackoverflow com questions 323972 is there any way to kill a thread in python创建一个可停止的线程 但是 我在理解如何实施
  • 如何在Java中执行特定时间段的任务?

    事实上 我会在确定的时间内执行特定的任务 一组指令 例如 我希望我的程序执行任务 5 分钟 如果它得到正确的结果 它会停止 否则它将继续执行正常任务 5 分钟 最后它告诉我 我怎样才能用Java实现这个 你可以像下面这样 import ja
  • 在c99中使用__thread

    我想使用 thread 存储类定义一些特定于线程的变量 但三个问题让我犹豫不决 它真的是c99的标准吗 或者更重要的是 编译器支持有多好 变量会在每个线程中初始化吗 非多线程程序是否将它们视为普通的旧全局变量 回答您的具体问题 不 它不是
  • UI 线程正在阻塞调用 COM 对象的后台线程

    我正在开发一个通过第三方 COM 库与外部设备通信的应用程序 我试图让与设备的所有通信都通过后台线程 以防止通信问题搞砸我的应用程序 并消除在 UI 线程中进行通信所引入的一些其他复杂性 问题是 每当发生导致主 UI 线程阻塞的情况 即调用
  • 有什么工具可以了解 Windows 中正在运行的进程的布局(段)?

    我一直很好奇 该进程在内存中到底是什么样子的 其中有哪些不同的部分 部分 程序 在磁盘上 和进程 在内存中 到底是如何相关的 我之前的问题 有关可执行程序 进程 的内存布局的更多信息 https stackoverflow com ques
  • Schedulers.io() 不返回主线程

    我正在使用 RxParse 来解析查询的异步负载 但是当我使用 subscribeOn Schedulers io 订阅我的可观察值时 我的 onCompleted 方法永远不会在主线程上调用 相反 我的 onCompleted 方法是在工
  • 使用 volatile bool 强制另一个线程等待是否安全? (C++)

    我读到的有关 volatile 的所有内容都说它永远不安全 但我仍然倾向于尝试它 而且我还没有看到这种特定场景被宣布为不安全 我有一个单独的线程来渲染场景 从主模拟线程中提取数据 这没有同步 并且工作正常 问题是 当程序退出时 渲染器需要停
  • WPF 从主线程以外的其他线程截屏

    我有一个线程用于侦听 WPF 应用程序的命令 如果 WPF 应用程序收到截取屏幕截图的命令 则任务将移交给 screenshotService 我在互联网上的某个地方找到了一些代码来截取屏幕截图 似乎可以工作 但我还没有想清楚 我无法从另一

随机推荐

  • iOS 中的 Google Analytics SDK 3.0 _sqlite3 链接器错误

    我正在整合谷歌分析 SDK 3 0在我的项目中 但我越来越链接器错误当尝试构建我的项目时 正如在文档 https developers google com analytics devguides collection ios v3 hea
  • 如何按键对字典进行排序,其中值是 Swift 4 中的对象数组?

    我有字典 其中包含String键和数组Objects作为价值 使用以下方法将这些值从已排序的对象数组添加到字典中append方法 根据对象属性的首字母将值分类为键 但返回未排序的字典 字典声明为 var namesDic String Na
  • Java 泛型问题:类“不在类型变量的范围内”错误。

    我正在开发一个涉及泛型的类项目 public interface Keyable
  • 耳机是否已插入? IOS 7

    为 iPhone 开发一个应用程序 其中包含也需要通过耳机收听的音频文件 如何检查耳机是否未插入 以便我可以告诉用户插入耳机 我有来自另一个线程的以下代码 但不推荐使用 audioSessionGetProperty 方法 任何人都知道如何
  • IntelliJ IDEA - 将 Finder 中的 Reveal 更改为新的文件浏览器

    我已经设置了路径查找器作为我的 OSX Yosemite 上的默认文件浏览器 管理器 因此 大多数应用程序在显示文件时会打开路径查找器窗口 但不会打开 IDEA 当我选择Reveal in Finder对文件执行操作时 它总是会打开一个新的
  • 如何在sqlite数据库中手动插入数据?

    我想在 sqlite 数据库中插入数据手册 使用cmd插入数据 我在android项目中使用了数据 如果您想从开发机器手动插入数据 那么您应该首先下载SQLite管理器从这里 http code google com p sqlite ma
  • 使用 javascript 渲染瓦片地图

    我正在寻找对获取瓷砖地图的示例实现想法的逻辑理解 如下所示 http thorsummoner github io old html tabletop test pallete tilesets fullmap scbw tiles png
  • 使用什么 ffmpeg 命令将无符号整数列表转换为音频文件?

    我有一个文件 其中包含大约四万个整数的列表 这些整数以空格分隔 每个整数的值都在 0 到 255 之间 这里是这个文件 https github com johnlai2004 sound project blob master integ
  • 使用 env 在 bash 中为一个程序调用设置环境变量

    我正在尝试通过命令调用具有修改后的环境的 shell 命令env 根据说明书 env HELLO Hello World echo HELLO 应该回声Hello World 但事实并非如此 如果我做 HELLO Hello World b
  • 调试 ASP.NET MVC 应用程序期间 CSS 未更​​新

    我正在开发一个基于 ASP NET MVC 的测试应用程序 我对 CSS 很陌生 所以我也在学习它 我创建了一个名为 new master 的母版页 并创建了一个新的 css new css 我将控制器中的视图称为 return View
  • Android Studio 中的类文件夹在哪里添加?

    我想在与活动不同的文件夹中设置课程 当前文件夹结构 gt APP gt Manifests gt Java gt com test testing gt classes auth java home activity gt libs aut
  • 同时运行 HAXM AVD 模拟器限制

    为了详细说明标题 我正在为我的自动化构建 测试流程运行许多同步 AVD 想想一个项目的并发构建 或一次构建多个项目 人们在同时运行多个 HAXM 加速 AVD 时遇到的大多数问题都与内存相关 这不是我的问题 我认为 我有一台非常强大的 i7
  • 在 SQL Server 中使用日期时间值自动填充表

    我有一张桌子叫Appointment我想在其中显示约会空档 60min intervals from 10am to 3pm for Weekdays till August 下面是我的表结构 AppointmentID Date Star
  • 如何在多线程中使用等待和通知协议

    具体来说 有人可以告诉我这段代码有什么问题吗 它应该启动线程 因此应该打印 Entering thread 5次 然后等待 直到调用notifyAll 但是 它随机打印 正在输入 和 完成 并且仍然继续等待其他人 public class
  • 离线安装 Android 支持存储库

    我正在尝试在 Linux 上设置 Android Studio Android SDK 我能够设置 Android Studio 和 SDK 工具以及除 Android 支持存储库 之外的其他组件 下载一直失败 所以我下载了android
  • sap hana - 选择顶部表达式[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我的存储过程有问题 该过程获取所需行数作为参数 但以下内容在 HANA 中不起作用 SELECT TOP NUM OF ROWS
  • 在 iOS 模拟器中按两次 Home 按钮不起作用

    如果我尝试在与 Xcode 8 3 捆绑的 iOS Simulator 10 3 中使用键盘手势显示多任务菜单 它无法响应 然而 按下单个按钮和菜单中的选项仍然有效 我该怎么做才能让它再次工作 If you disconnect the h
  • ExoPlayer - 如何播放本地mp3文件

    我正在尝试使用 ExoPlayer 而不是 MediaPlayer 因为 MediaPlayer 返回错误的 getCurrentPosition 是一个常见错误 我需要一个替代品 但我无法在任何地方找到如何通过与 MediaPlayer
  • 创建具有默认值的合并两列的表

    是否可以创建一个包含组合两个列值的列的表 像这样的东西 创建表test1 number1 小数 6 2 number2 小数 6 2 总小数 6 2 DEFAULT number1 number2 是的 11G 它被称为 虚拟 列 语法是
  • 轻量级进程和线程有什么区别?

    我找到了问题的答案here http wiki answers com Q What is the difference between LWP and threads 但我不明白答案中的一些想法 例如 据说轻量级进程与其他进程共享其逻辑地