据我所知,在C#中使用Task创建选项TaskCreationOptions。LongRunning创建一个新的任务,它的行为类似于线程。
如果我有一个方法A,并创建了8个任务,并将该方法作为委托传递,以强制它们调用该方法,那么每个任务都将单独调用方法A,最重要的是,每个任务和它的方法都有一个堆栈的副本,所以如果在该方法中有任何操作使用了该方法中声明的变量,那么就没有并发性,它也没有。不影响加速执行时间。
结果是,8个任务同时执行相同的方法8次,与1个单线程执行相同的方法相同。
我的目标是让这个方法在使用8个任务时的执行速度比使用1个任务时的执行速度快8倍。
有可能做这件事吗?我还没有找到任何真实的例子。
1条答案
按热度按时间jm81lzqq1#
长话短说:那要看情况。取决于您的方法正在处理的工作负载。有两个主要类别:所谓的“IO绑定”,这是所有关于与外部独立设备(如网卡或磁盘)对话并等待它们准备就绪(同时CPU没有有用的指令要执行,因此
nop
指令实际上浪费了所有的时钟周期);另一类被称为“CPU限制”-它涉及数字破解,避免与外部设备甚至RAM交谈,严重依赖于CPU缓存和寄存器(散列或压缩是一个很好的例子)。并行执行的方式取决于您的工作负载类型。如果你想要一个关于如何加速你的特定代码的好建议,那么向我们展示你心中的代码。请更新帖子,我们会看到的。