单核处理器上的单线程与多线程编程

2024-02-05

有人可以解释一下编写在单核处理器上运行的多线程代码是否真的有任何优势吗?例如,一种处理文档页面的方法,使得页面与上述代码段是互斥的。

乍一看,这似乎没有优势,因为真正的多线程是不可能的。也就是说,操作系统无论如何都必须对线程进行上下文切换。我想知道以单线程方式编码是否实际上会更有效。

显然,在很多情况下编写多线程代码是有意义的,但我的问题又是当应用程序在单核处理器上运行时这样做是否真的有优势。

编辑:请注意,我没有说“应用程序”,而是说“一段代码”- 看我上面的例子。显然,拥有多线程应用程序有很多好处。


仍然可以获得一些优势,但它们有点视情况而定。

  • 在许多情况下,为该事物提供多个线程将允许它从其他进程索取更多系统资源。这对于平衡来说很挑剔,并且您引入的每个线程都会增加一点开销,但这可能是一个原因。

  • 如果您正在处理多个可能阻塞的资源(例如文件 IO 或 GUI 交互或诸如此类),那么多线程可能至关重要。

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

单核处理器上的单线程与多线程编程 的相关文章

  • 等待 .NET 线程启动的正确方法是什么?

    我在微软网站上的线程教程中阅读了以下内容 http msdn microsoft com en us library aa645740 v vs 71 aspx http msdn microsoft com en us library a
  • 如何在.NET 中编写安全/正确的多线程代码?

    今天我必须修复一些使用线程的旧 VB NET 1 0 代码 问题在于从工作线程而不是 UI 线程更新 UI 元素 我花了一些时间才发现可以使用 InvokeRequired 断言来查找问题 除了上面提到的并发修改问题之外 还可能遇到死锁 竞
  • c++11 中的 std::thread 问题

    我在尝试从标准模板库编译具有多线程的程序时遇到一些麻烦 当我尝试编译以下程序时 它返回一个晦涩的错误 include
  • 如果未返回,则在一段时间后终止线程

    我有一个线程从网络或串行端口获取一些数据 如果 5 秒内没有收到数据 则线程必须终止 或返回 false 换句话说 如果线程运行时间超过 5 秒 则必须停止 我用 C 编写 但任何 NET 语言都可以 有两种方法 1 封装超时 从网络或串行
  • CPU Relax 指令和 C++11 原语

    我注意到许多使用特定于操作系统的原语实现的无锁算法 例如所描述的自旋锁here http locklessinc com articles locks 使用 Linux 特定的原子原语 经常使用 cpurelax 指令 使用 GCC 可以通
  • 为什么在谈论线程和进程时,“不要同时格式化软盘”的评论很有趣?

    我正在阅读之间的区别线程和进程 https stackoverflow com questions 200469 what is the difference between a process and a thread并在第二个答案中发现
  • 在 Three.js 中从 Web Worker 加载纹理

    当将大纹理图像应用到网格上一段明显的时间时 Three js 会锁定浏览器的主线程 让我们考虑以下示例 var texLoader new THREE TextureLoader texLoader load someLargeTextur
  • 理解 JavaScript 的单线程本质

    我一直在阅读 John Resig 的 JavaScript Ninja 的秘密 它解释了 JavaScript 是单线程的 但是 我尝试对此进行测试 但我不确定要从这里删除什么 executing this in browser func
  • Python 中的错误? threading.Thread.start() 并不总是返回

    我有一个很小的 Python 脚本 在我看来 threading Thread start 表现出意外 因为它不会立即返回 在线程内我想调用一个方法boost python基于对象 不会立即返回 为此 我将对象 方法包装如下 import
  • 断点会停止所有线程吗?

    如果我的程序中有两个线程同时运行 并在其中一个线程上设置了断点 那么当遇到此断点时 另一个线程也会停止 还是会继续执行 我用 Java 编写并使用 NetBeans 断点可以选择它们的行为方式 挂起单个线程或所有线程
  • 如何限制Erlang VM(BEAM)使用的核心数量?

    我正在具有 2 个四核 Xeon E5520 2 2GHz 24 0GB RAM 和 Erlang R15B02 启用 SMP 的节点上运行实验 我想知道是否可以限制Erlang VM使用的核心数量 以便我可以暂时禁用一些核心并逐步增加数量
  • fprintf() 线程安全吗?

    我正在为野人就餐问题的某些变量编写一个 C 解决方案 现在 我创建线程 每个线程都将 FILE 获取到同一个调试文件 在线程内我正在使用 fprintf 进行一些打印 打印的语句不受任何类型的互斥锁等保护 我没有在调试文件中观察到任何交错行
  • Android 为什么这不会抛出错误的线程异常?

    我的印象是视图只能从主线程操作 但是 为什么这不会崩溃 public class MainActivity extends Activity TextView tv Override protected void onCreate Bund
  • 在 Python 中打印守护线程异常

    Python 不会打印守护线程中引发的异常的回溯消息 例如 以下代码创建一个守护线程并在新线程中引发异常 def error raiser raise Exception import threading thread threading
  • 调用许多网络服务的最佳方式?

    我有 30 家子公司 每家都实施了他们的 Web 服务 使用不同的技术 我需要实现一个Web服务来聚合它们 例如 所有子公司的Web服务都有一个名为的Web方法GetUserPoint int nationalCode 我需要实现我的网络服
  • 这个等待通知线程语义的真正目的是什么?

    我刚刚遇到一些代码 它使用等待通知构造通过其其他成员方法与类中定义的线程进行通信 有趣的是 获取锁后 同步范围内的所有线程都会在同一锁上进行定时等待 请参见下面的代码片段 随后 在非同步作用域中 线程执行其关键函数 即 做一些有用的事情1
  • 使用单独的线程在java中读取和写入文件

    我创建了两个线程并修改了 run 函数 以便一个线程读取一行 另一个线程将同一行写入新文件 这种情况会发生直到整个文件被复制为止 我遇到的问题是 即使我使用变量来控制线程一一执行 但线程的执行仍然不均匀 即一个线程执行多次 然后控制权转移
  • 奇怪的跨线程 UI 错误

    我正在编写一个 WinForms 应用程序 它有两种模式 控制台或 GUI 同一解决方案中的三个项目 一个用于控制台应用程序 一个用于 UI 表单 第三个用于保存两个界面也将连接的逻辑 控制台应用程序运行绝对流畅 保存用户选择的模型 它有一
  • 这是 C# 的有效、惰性、线程安全的 Singleton 实现吗?

    我实现了这样的单例模式 public sealed class MyClass public static MyClass Instance get return SingletonHolder instance static class
  • C++11 函数局部静态 const 对象的线程安全初始化

    这个问题已在 C 98 上下文中提出 并在该上下文中得到回答 但没有明确说明有关 C 11 的内容 const some type create const thingy lock my lock some mutex static con

随机推荐

  • 根据 Woocommerce 中的客户总购买金额添加百分比折扣

    在 Woocommerce 中 我想根据客户总购买金额设置百分比折扣 例如 如果购买总金额大于或等于200 客户得到5 折扣 因此 我有用于显示总和的代码的第一部分 function get customer total order cus
  • 根据文档列表查询 FireStore

    我有一个List
  • 获取用户上次访问时间

    我正在为我的 asp net core API 使用 IdentityServer 4 带有 sql 存储 我想在数据库中的某个位置添加一个 上次访问 字段 该字段可用于在用户搜索端点中对我的用户类型之一进行排序 理想情况下 这将显示他们上
  • React Native:依赖项的 AAR 元数据中指定的 minCompileSdk (31) 大于此模块的compileSdkVersion (android-30) [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在使用 React Native npx react native run android 我还有很多其他解决方案 比如强制或更新
  • 谁能给我一个有关 Python 3 中 stdin 和 stdout 的快速教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 Perl 连接到 SQL Server?

    我有用户 ID 密码 数据库名称和数据源详细信息 我想用 Perl 连接到 MSSQL 服务器 我刚刚使用了以下代码片段 但出现错误 usr bin perl w use strict use DBI my data source q db
  • X3:如何创建解析器来读取集合?

    如何创建一个规则来读取 3 个一组的整数 即 1 2 3 OK 1 set of 3 ints 1 2 3 4 5 6 OK 2 sets of 3 ints 1 2 3 4 5 ERROR 1 set of 3 ints 1 short
  • Rails + Sinatra 应用程序分享会

    我还没有找到一个好的答案 如何让我的 Rails 应用程序和 Sinatra 应用程序 安装在我的 Rails 应用程序的 config ru 中 成功共享会话 如果我先访问我的 Sinatra 应用程序 然后访问 Rails 应用程序 我
  • @State 的限制

    我在一些文章中看到 state有很多限制 我们不应该将它与复杂的模型一起使用 最好将它与简单的属性 如 string bool 等 一起使用 我们应该在视图本身内部使用它 我尝试制作一个结构模型 并在内容视图 ParentView 中用 s
  • 在 iis 上托管基本 html 网站

    我有一个基本网站 只有 html js 和 css 文件 我想将其托管在本地计算机上的 IIS 上以进行测试 当我直接将其作为文件在计算机上运行时 该网站运行良好 我使用这些文件所在的目录在 IIS 上添加了一个网站 但是当我尝试启动它时
  • Android 中的多个 HTTP 连接(分段/群下载)下载同一文件

    我目前正在为 Android 创建一个下载管理器 为了优化下载 我需要使用与服务器的多个连接来下载相同的文件 即 与 Windows 中的 Internet 下载管理器中使用的技术相同 问题是我不知道如何创建多个 HTTP 连接并下载相同的
  • 如何设计响应的打字稿模型?

    如何在得到以下响应的打字稿中设计我的模型 data name XYZ id 1 name Abc id 2 我尝试了什么 export class responseModel
  • 自引用 has_many :through 和自定义 :primary key 问题

    我正在尝试在 Rails 2 3 8 应用程序 ruby 1 8 7 中模拟 twitter 模型 class Connection lt ActiveRecord Base belongs to subject foreign key g
  • 以一种形式上传多个文件 MVC4

    我正在尝试在一张表单上上传多张图片 using Html BeginForm Create AdminRestaurants FormMethod Post new enctype multipart form data div class
  • 为什么 CSS 填充会增加元素的大小?

    我试图给我的 div 和 textarea 一些填充 当我这样做时 它会增加元素的大小 而不是缩小元素内部的内容区域 有什么办法可以实现我想做的事情吗 你可以添加box sizing border box到容器元素 以便能够指定在向元素添加
  • Linux中访问另一个进程虚拟内存(调试)

    Linux上gdb如何访问另一个进程的虚拟内存 都是通过 proc完成的吗 Linux上gdb如何访问另一个进程的虚拟内存 都是通过 proc完成的吗 在Linux上读取内存 1 如果要读取的字节数小于3 sizeof long 或文件系统
  • Scala中递归删除目录

    我正在编写以下内容 使用 Scala 2 10 和 Java 6 import java io def delete file File if file isDirectory Option file listFiles map toLis
  • 在某些设备上,两个活动之间的拖放功能不起作用

    我使用以下代码将视图从应用程序中的一个活动拖动到另一个活动 知道拖动开始时第二个活动 接收放置事件 未创建 活动 它适用于 三星 Note 3 Android 5 API 21 三星 Note 4 Android 6 0 1 API 23
  • 从我的应用程序捕获 iPhone 屏幕并录制视频

    我只是好奇创建一个应用程序来录制 iPhone 屏幕视频或捕获 iPhone 屏幕图像 我知道苹果不允许应用程序商店上架此类应用程序 而且我无意这样做 我可以将我的应用程序上传到Cydia如果我愿意的话 但我目前的目标只是开发一个具有捕获
  • 单核处理器上的单线程与多线程编程

    有人可以解释一下编写在单核处理器上运行的多线程代码是否真的有任何优势吗 例如 一种处理文档页面的方法 使得页面与上述代码段是互斥的 乍一看 这似乎没有优势 因为真正的多线程是不可能的 也就是说 操作系统无论如何都必须对线程进行上下文切换 我