混合线程模型 (M:N) 实现

2023-11-21

three通常由操作系统内核完成的线程调度实现中使用的线程模型。其中之一是混合动力(M:N)模型,其中一些N应用程序线程映射到M内核线程,以便它们可以使用最多M处理器。这种模式有优点也有缺点。优点之一是基于此模型的语言将引入语言级调度程序实现,负责管理和调度应用程序级线程。

  • 我想知道是否有人知道任何已经完成此工作的努力或工作,以便语言或图书馆可以利用它?
  • 例如,考虑到内核 2.6.23+ 使用名为 CFS 的算法进行调度,您认为这种混合模型是否是明智的投资方法?

首先请阅读以下内容:http://www.kegel.com/c10k.html#1:1

Linux 从内核 2.6(NPTL Native Posix 线程库)开始使用 1:1 线程模型,如今几乎所有操作系统都转向此模型:

  • 如果我没记错的话,FreeBSD 从 7.0 开始。
  • 某些版本的 Solaris 开始也改为 1:1 - 我不记得是哪一个了。

Linux 曾经有 M:N 模型(这是在 2.4 NGPT 中),但 1:1 通常更优越。

M:N模型最大的问题是:

  1. 实施起来困难
  2. 当使用阻塞系统调用时,您实际上需要以某种方式通知内核仅阻塞一个用户空间线程而不是内核线程
  3. 在多核时代,您希望拥有尽可能多的内核线程。

其中之一是混合 (M:N) 模型,其中应用程序的 N 个线程映射到 M 个可用处理器。

小修正 - N 个应用程序线程映射到 M 个内核线程,以便它们可以使用up到 M 个处理器。

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

混合线程模型 (M:N) 实现 的相关文章

  • Memcached的get和put方法是线程安全的吗

    多线程环境下memcached中的key是否有可能出现乱码 如果是这样 如何以最短的同步时间避免它 使用Java客户端访问memcached服务器 不会 Memcache 将返回某人之前写入的值 而不是乱码 如果您获取 修改 放置 则无法保
  • 在 C# 中使用 volatile (Thread.VolatileRead/Thread.VolatileWrite)

    在多CP U机器上运行的多线程程序中 我是否需要使用易失性读 写来访问共享状态 下面示例代码中的 data 以确保正确性 换句话说 堆对象可以缓存在cpu上吗 使用下面的示例并假设多线程将访问 GetValue 和 Add 方法 我需要 T
  • 如何一次运行多个后台线程任务?

    我正在尝试循环遍历包含 2016 年 10 月日期的 String 对象数组 这意味着 31 个 String 对象 2016 年 10 月 1 日 2016 年 10 月 31 日 对于每个对象 我想从数据库检索一些数据并附加返回值 也是
  • 什么是 ref 可以做但引用却不能做的事情?

    什么可以ref难道参考文献不能吗 可以 match value try thing Some ref e gt do stuff e 不能同等地表达为 match value try thing Some e gt do stuff e 编
  • 需要一些关于调度队列、线程和 NSRunLoop 的澄清

    以下是我所知道和理解的事情 全局队列是一个同时队列 可以将任务分派给多个线程 不保证执行任务的顺序 例如 dispatch async dispatch get global queue DISPATCH QUEUE PRIORITY DE
  • Android Thread、AsyncTask 与从 BLE onCharacteristicChanged() 调用的 IntentService

    我有一个 Android 应用程序 我从中接收 BLE 数据 每 62 毫秒通过通知 该应用程序可以通过 BufferedWriter 将数据保存到文件中 在每次 onCharacteristicChanged 回调时 如果用户启用了文件保
  • MFC:从另一个线程调用 CWnd 方法安全吗?

    其实我有两个问题 打电话安全吗SendMessage来自工作线程 Do CWnd方法 比如MessageBox 调用API函数SendMessage幕后 根据我的理解 当工作线程调用时SendMessage 它将消息推送到UI线程的消息队列
  • 使用 .Net HttpListener 进行多线程

    我有一个听众 listener new HttpListener listener Prefixes Add http 8077 listener Start listenerThread new Thread HandleRequests
  • 如何使 Log4Net 包装类成为单例类?

    我有一个 log4net 包装类 但是每次我从其他类调用它来记录错误时都需要实例化 我需要克服这个问题 最近我遇到了我不熟悉的单例类 因此我需要帮助将我当前的包装类转换为单例类 我正在发布我目前正在使用的 log4net 包装类 using
  • 唤醒单个线程而不是 pthread 中的忙等待

    我不确定标题是否反映了我在这里提出的问题 但这是我在没有很长的标题的情况下能做的最好的事情 我正在尝试实施一个worker thread模型中pthreads 我想从中产生一组线程main函数以及此后的main线程将工作委托给工作人员 并等
  • 使用 MinGW gcc 4.4.0 增强 thread_interrupted 异常终止(),使用 3.4.5 则正常

    今天我一直在 玩弄 boost 线程作为学习练习 并且我有一个几个月前构建的工作示例 在我被打断并不得不暂时放弃多线程之前 它显示了不寻常的行为 当我最初编写它时 我使用的是 MingW gcc 3 4 5 并且它有效 现在我正在使用 4
  • C++ 类内线程并发

    我试图在一个类中运行两个并发线程 它们都使用相同的函数打印数据 使用 std lock guard 进行作用域锁 问题是只有第一个线程被触发 第二个线程永远不会被调用 include
  • 发布/订阅架构

    我尝试编写一个发布 订阅系统 客户端和服务器端 其中客户端接收定期更新 如心跳 消息控制 并可以向服务器发出命令 订阅某些源 这样做的好方法是什么 我已经有一个实现线程池的服务器来管理传入的客户端连接 我想知道如何处理连接双方都可以在 Ne
  • C++并行std::sort用于浮点值

    我有一个包含数百万个浮点值的大文件 我可以使用轻松对它们进行排序std sort通过将文件读入vector现在 例如 std vector
  • 为什么将 volatile 与同步块一起使用?

    我在java中看到了一些示例 其中他们在代码块上进行同步以更改某些变量 而该变量最初被声明为易失性 我在单例类的示例中看到 他们将唯一实例声明为易失性 并且同步了该块初始化该实例 我的问题是为什么我们在同步它时声明它是易失性的 为什么我们需
  • Qt中用于线程间通信的类设计

    问题陈述 用相机跟踪物体并相应地移动相机的方位角和仰角 Process 相机获取物体的图像 处理相机的每一帧以查找物体 应该被跟踪 并将每帧中生成的信息传递给机械设备 万向节 以平移和倾斜方式移动摄像机 Design 主 Gui 在一个线程
  • 如何在 C++ 中急于提交分配的内存?

    总体情况 带宽 CPU 使用率和 GPU 使用率都极其密集的应用程序需要每秒从一个 GPU 向另一个 GPU 传输约 10 15GB 的数据 它使用 DX11 API 来访问 GPU 因此上传到 GPU 只能在每次上传都需要映射的缓冲区中进
  • 有哪些学习线程编程的好资源? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 随着多核CPU在桌面上的兴起 多线程技能将成为程序员的宝贵资产 您能为想要学习线程编程的程序员推荐一些好的资源 书籍 教程 网站等 吗 看
  • Hazelcast 分布式锁与 iMap

    我们目前使用 Hazelcast 3 1 5 我有一个简单的分布式锁定机制 应该可以跨多个 JVM 节点提供线程安全性 代码非常简单 private static HazelcastInstance hInst getHazelcastIn
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但

随机推荐