首页 / 知识
关于.net:多线程设计最佳实践
2023-04-12 03:50:00

Multithreading Design Best Practice考虑一下这个问题:我有一个程序应该从数据库中获取(比如说)100条记录,然后对于每个记录,它应该从Web服务获取更新的信息。 在这种情况下,有两种方法可以引入并行性: 我在新线程上启动对Web服务的每个请求。 并发线程数由某些外部参数控制(或以某种方式动态调整)。 我创建较小的批处理(假设每个记录有10条记录),并在单独的线程上启动每个批处理(因此以我们的示例为10个线程)。 哪种方法更好,为什么会这样呢? 选项3最好: 使用异步IO。 除非您的请求处理复杂而繁琐,否则您的程序将花费99%的时间等待HTTP请求。 这正是异步IO的设计目的-让Windows网络堆栈(或.net框架或其他任何东西)担心所有等待,而仅使用一个线程来分派和"拾取"结果。 不幸的是,.NET框架使它陷入了困境。如果您仅使用原始套接字或Win32 API,则会更容易。无论如何,这是一个使用C#3的(经过测试!)示例:
编辑: 对于.NET,"完成回调"实际上是在ThreadPool线程中触发的,而不是在您的主线程中触发的,因此您仍然需要锁定任何共享资源,但仍然省去了管理线程的所有麻烦。 有两件事要考虑。 1.处理记录需要多长时间? 如果记录处理非常快,则将记录移交给线程的开销可能会成为瓶颈。在这种情况下,您可能希望捆绑记录,这样就不必经常将它们交出。 如果记录处理可以合理地长时间运行,则差异可以忽略不计,因此较简单的方法(每个线程1条记录)可能是最好的方法。 2.您计划启动多少个线程? 如果您不使用线程池,我认为您要么需要手动限制线程数,要么需要将数据分成大块。如果记录数量很大,则为每个记录启动一个新线程将使您的系统崩溃。 获取平行Fx。看一下BlockingCollection。使用一个线程为它提供批记录,并使用1到n个线程将记录从集合中提取出来以进行服务。您可以控制提供集合的速率以及调用Web服务的线程数。通过ConfigSection使其可配置,并通过提供Action委托集合使其通用,您将拥有一个不错的小批处理程序,可以将其重用于您的内心世界。
运行该程序的计算机可能不是瓶颈,因此: 在回答您的请求时也可能会有延迟。您可以尝试确保始终对服务器有一定数量的未完成请求。 |
最新内容
相关内容
python中获取路径的三种方法
python中获取路径的三种方法,工作,代码,情况,培训,下来,路径,文件,也就是,桌面,目录,python中获取路径总结下来分为三种情况:1、获取工作目录python列表有哪些常用方法?
python列表有哪些常用方法?,位置,方法,培训,列表,语法,元素,示例,对象,以上,参数,列表是最常用的Python数据类型,它可以作为一个方括号内的逗python怎样终止线程
python怎样终止线程,培训,线程,方法,定义,以上,更多,内容,在python中启动和关闭线程:一、启动线程首先导入threadingimportthreading然后定Python如何创建对象,有哪些方法
Python如何创建对象,有哪些方法,培训,对象,方法,内容,函数,属性,所在,以上,以下,功能,以下介绍Python创建对象的9种方法。classPoint:def__iniPython静态函数和普通方法的区别
Python静态函数和普通方法的区别,培训,方法,静态,区别,实例,函数,属性,结果,例子,下面,下面通过一个例子,讲解Python静态函数、普通方法、类方python中什么是类方法
python中什么是类方法,培训,方法,实例,静态,定义,参数,函数,内部,变量,属性,python中的类方法,指的是在类中定义的函数,函数在类的内部称为方法python看类里有哪些方法
python看类里有哪些方法,信息,员工,培训,名称,方法,函数,冒号,字符串,语句,结尾,python使用class语句来创建一个新类,class之后为类的名称并以python怎么调用方法
python怎么调用方法,系统,培训,方法,参数,法名,定义,列表,实例,以上,函数,python调用的方法类的方法的定义1、定义一个类deffun_name(self,..python对象与方法的区别是什么
python对象与方法的区别是什么,地址,数据,培训,对象,函数,类型,字符串,方法,表示,身份,python使用对象模型来存储数据,也就是说构造任何类型的python调用方法必须实例化么
python调用方法必须实例化么,代码,培训,方法,静态,工厂,参数,程序,对象,实例,定义,python类中的实例方法和静态方法,在调用时,是有区别的。静态python调用本类方法
python调用本类方法,培训,方法,定义,静态,实例,关键字,以上,更多,内容,python如何调用本类方法要想调用类中的方法,首先要定义一个类,python中python有map方法吗
python有map方法吗,培训,位置,数据,函数,列表,序列,参数,元素,方法,使用方法,python中的map:map()会根据提供的函数对指定序列做映射。第一个