社区首页 >问答首页 >强制Task<T>到不同的核心?

强制Task<T>到不同的核心?
EN

Stack Overflow用户
提问于 2013-03-30 04:30:26
回答 1查看 2.7K关注 0票数 2

TplPlinq自动将工作分配给线程(在核心/s.{那么,如果是#threads> #cores,>1个线程将运行在同一个内核上。( })

但是,假设我有MyMethod1(){..}MyMethod2(){..},我需要确保(!)每个人都会在不同的核心上运行!(例如密集计算)

我找到的最接近的解决方案是Plinq的.WithExecutionMode (ParallelExecutionMode.ForceParallelism)

但是,对于不同的情况,Plinq可能会认为,与parallel.Also相比,按顺序执行更好,我不使用Plinq。我只有两个方法,需要运行在一个不同的核心。

我该怎么做呢?

附注:这里有一个建议使用TaskCreationOptions.LongRunning的答案,但它只是向TaskScheduler暗示,它应该更积极地创建线程池线程。但这些线程可以在同一个核心上。我的处境要求他们处于不同的核心。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-30 05:11:27

要做到这一点,需要分解几个抽象层,在此之前,我建议进行相当多的分析,以确定这样做比让框架处理资源分配更好。我有点怀疑(虽然我不能说我分析过)。

您需要做的第一件事是确保在不同的托管线程上执行两个Task。因为这是试图断言对框架处理的东西的手动控制,因此要确定这是您需要编写自己的TaskScheduler的情况。但是,实际上您可以通过指定TaskCreationOptions.LongRunning标志来实现这一点。至少在当前桌面CLR上,这将始终创建一个新线程。但这只是个暗示,就API而言。

下一个要打破的抽象是托管和原生线程的抽象。每个方法都应该包装在一个螺纹亲和力块中。允许框架切换运行托管线程的物理线程。因为处理器关联是一个本机线程操作,所以您必须告诉框架不要这样做。

接下来,您需要获得对应于当前托管线程的本机线程。在每个方法中,在调用BeginThreadAffinity之后,通过p/invoke调用GetCurrentThreadId来获取本机线程。

现在,您可以在本机或托管域中完成其余的操作,但我将假设您希望在.NET中这样做。

代码语言:javascript
代码运行次数:0
复制
Thread.BeginThreadAffinity();
int threadId = GetCurrentThreadId();
Process proc = Process.GetCurrentProcess();
ProcessThread procThread = proc.Threads.Cast<ProcessThread>().Single(
    pt => pt.Id == threadId
);
procThread.ProcessorAffinity = new IntPtr(0x01);
//
// work
//
procThread.ProcessorAffinity = new IntPtr(0xFFFF);
Thread.EndThreadAffinity()
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15718529

复制
相关文章
Spring Cloud Task 核心组件-Task Application
Spring Cloud Task是Spring Cloud生态系统中的一个重要组件,用于支持有状态的短暂任务的开发和执行。
堕落飞鸟
2023/04/16
6111
Spring Cloud Task 核心组件-Task Repository
Spring Cloud Task是一个用于构建简单任务的框架。它提供了Task Application、Task Launcher和Task Repository三个核心组件,分别用于定义和执行任务、启动和管理任务、以及存储任务相关的元数据和状态信息。其中,Task Repository是Spring Cloud Task的核心组件之一,它负责管理和存储任务相关的数据。
堕落飞鸟
2023/04/16
2880
【C# 基础精讲】Task和Task<T>的应用
当涉及异步编程时,Task 和 Task<T> 是C#中的重要概念。它们不仅是处理异步操作的关键类型,还提供了一些强大的功能和方法,使异步编程更加高效和灵活。在本文中,我们将深入探讨 Task 和 Task<T> 的应用,从创建、执行、等待到取消和异常处理等方面进行详细讨论,帮助您更好地理解如何在C#中应用这些类型。
繁依Fanyi
2023/10/12
7310
【C# 基础精讲】Task和Task<T>的应用
Spring Cloud Task 核心组件-Task Launcher
Spring Cloud Task是一个用于快速创建和执行短暂任务的框架。Task Launcher是Spring Cloud Task的另一个核心组件,它可以帮助我们在多个环境中部署和执行Task Application。
堕落飞鸟
2023/04/16
7941
Spring Cloud Task 核心组件-Task Explorer
在使用Spring Cloud Task时,我们通常需要查看已经执行的任务以及任务的执行状态等信息。而Task Explorer正是为我们提供了这些信息的组件。
堕落飞鸟
2023/04/16
5610
Spring Cloud Task 核心组件-Task Execution Listener
Spring Cloud Task是一个用于构建简单任务的框架。它提供了Task Application、Task Launcher、Task Repository等多个核心组件,分别用于定义和执行任务、启动和管理任务、以及存储任务相关的元数据和状态信息。其中,Task Execution Listener是Spring Cloud Task的核心组件之一,它用于监控和管理任务的执行过程。
堕落飞鸟
2023/04/16
6301
C++核心准则T.65:使用标签分发提供函数的不同实现
T.65: Use tag dispatch to provide alternative implementations of a function
面向对象思考
2020/09/21
1K0
C++核心准则T.64​:使用特化提供类模板的不同实现
T.64: Use specialization to provide alternative implementations of class templates
面向对象思考
2020/09/21
6740
Task和backStack(本篇章核心)
摘要总结:通过分析Task和backStack的关系,可以得出一个task内可以有多个Activity,一个Task也可以对应多个Process。同时,通过adb shell dumpsys activity命令可以观察到,一个Task内的Activity可以属于同一个App,也可以属于不同的App。通过学习源码,可以发现,在ActivityManagerService中,Task被封装成TaskRecord对象,每个Task对应一个TaskStack,每个TaskStack包含一个mHistory Stack。在mHistory Stack中,每个元素都是一个ActivityRecord对象,ActivityRecord对象通过TaskRecord与对应的Task关联,通过Activity info与对应的Activity关联。同时,同一个Task内的ActivityRecord在mHistory中会按照先入先出的顺序进行排序。
梦里茶
2017/12/29
5740
Task和backStack(本篇章核心)
T-SQL取时间的不同方法
超级实用的T-SQL取时间的不同方法 CONVERT(nvarchar(10),count_time,121): CONVERT为日期转换函数,一般就是在时间类型 (datetime,smalldatetime)与字符串类型(nchar,nvarchar,char,varchar)相互转换的时候才用到的函数的3个参数,第1个参数为,转换后的大小,第2个为转换日期的字段或函数,第3个为转换的格式,具体如下: 0 | 0 or 100 | mon dd yyyy hh:miAM(或PM) 1 | 101 |
用户1719978
2018/07/05
5970
T24银行核心业务系统
http://www.pianshen.com/article/8248107255/
全栈程序员站长
2022/09/20
1.2K0
通过JavaScript实现HTTP到HTTPS的强制跳转 By HKL,
最近通过一些在线文件云空间测试云存储部署静态网站遇到HTTP到HTTPS的强制跳转的问题,平时通过nginx配置是比较简单实现的, 但是例如七牛云虽然可以设置HTTPS访问,但是不支持设置HTTP到HTTPS的强制跳转, 解决方法可以是先通过设置HSTS,通过浏览器级的强制跳转实现,但是本方法只能在webkit内核的浏览器上生效,而且由一定的时间差, 所以最后寻找到通过前端JavaScript脚本实现HTTP到HTTPS的强制跳转,代码如下
hiplon
2020/07/22
1.8K0
阻塞队列的核心方法&对阻塞的不同处理
阻塞队列,顾名思义,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如下图所示:
名字是乱打的
2022/05/13
6920
阻塞队列的核心方法&对阻塞的不同处理
从T+1到T+0,浅谈PetaBase的实时流式处理
随着互联网+的进一步发展,各行业对大数据技术的应用日趋成熟,企业的信息化范围正在高速扩展。
数据狗忙忙忙
2019/08/13
2.5K0
从T+1到T+0,浅谈PetaBase的实时流式处理
【leetcode刷题】T156-不同路径
https://leetcode-cn.com/problems/unique-paths/
木又AI帮
2019/09/03
2940
PHP实现根据请求的域名跳转到不同目录 By HKL, T
使用一些PHP虚拟主机的时候,多个域名绑定到同一空间下,但是希望不同域名能通过不同目录实现访问不同网站的效果:
hiplon
2020/07/22
2.3K0
Locust性能测试工具核心技术@task和@events
Tasks和Events是Locust性能测试工具的核心技术,有了它们,Locust才能称得上是一个性能工具。
dongfanger
2021/06/10
4590
生成代码,从 T 到 T1, T2, Tn —— 自动生成多个类型的泛型
发布于 2018-01-31 05:38 更新于 2018-05-25 12:33
walterlv
2018/09/18
1.4K0
生成代码,从 T 到 T1, T2, Tn —— 自动生成多个类型的泛型
从1.6T光模块到51.2T交换芯片,寡头的狂欢!
400G网络设备产业现状:完结篇 800G网络设备产业现状:技术篇 800G网络设备产业现状:芯片篇 800G网络设备产业现状:思科篇 800G网络设备产业现状:光模块篇 当诺基亚这种老厂 都说400G已经到了拐点 那就代表400G已经是池中物 因此在早前 结束的OFC2021 800G技术成为国内外 各大光模块厂商的主战场 华安证券 在会议结束后推出的 通信行业周报对800G现状 做了一个简单明了的梳理总结 除了高端光模块 相关产业链的进展 报告将重心放在数据中心 因为以太网光模块将占
用户6874558
2023/02/15
1.2K0
从1.6T光模块到51.2T交换芯片,寡头的狂欢!
Spark Task 的执行流程② - 创建、分发 Task
task 的创建本应该放在分配 tasks 给 executors一文中进行介绍,但由于创建的过程与分发及之后的反序列化执行关系紧密,我把这一部分内容挪到了本文。
codingforfun
2018/08/24
7250
Spark Task 的执行流程② - 创建、分发 Task

相似问题

await Task<T>和Task<T>.Result有什么不同?

23

IAsyncEnumerable<T>和IEnumerable<Task<T>>有什么不同?

232

ASP.NET核心应用编程接口- ActionResult<T>与异步Task<T>

20

将Task<DbSet<T>>转换为Task<IEnumerable<T>>

36

不等待从EF核心查询返回Task<IReadOnlyCollection<T>>?

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档