360网站安全在线检测,google在线代理,哪个网站买东西是正品又便宜,wordpress上传到虚机本文参考的博文出处#xff1a;http://www.cnblogs.com/stoneniqiu/p/4857021.html
总体说明#xff1a;
#xff08;1#xff09;、理解硬件线程和软件线程 硬件线程也称为逻辑内核#xff0c;一个物理内核可以使用超线程技术提供多个硬件线程。所以一个硬件线程并不代…本文参考的博文出处http://www.cnblogs.com/stoneniqiu/p/4857021.html
总体说明
1、理解硬件线程和软件线程 硬件线程也称为逻辑内核一个物理内核可以使用超线程技术提供多个硬件线程。所以一个硬件线程并不代表一个物理内核Windows中每个运行的程序都是一个进程每一个进程都会创建并运行一个或多个线程这些线程称为软件线程。硬件线程就像是一条泳道而软件线程就是在其中游泳的人。
2Net Framework4 引入了新的Task Parallel Library(任务并行库TPL)它支持数据并行、任务并行和流水线。让开发人员应付不同的并行场合。
数据并行有大量数据需要处理并且必须对每一份数据执行同样的操作。比如通过256bit的密钥对100个Unicode字符串进行AES算法加密。任务并行通过任务并发运行不同的操作。例如生成文件散列码加密字符串创建缩略图。流水线这是任务并行和数据并行的结合体。TPL引入了System.Threading.Tasks ,主类是Task这个类表示一个异步的并发的操作然而我们不一定要使用Task类的实例可以使用Parallel静态类。它提供了Parallel.Invoke, Parallel.For Parallel.Forecah 三个方法。
一、业务场景 目前在模拟工作中可能遇到的一个场景从中间服务器读取xml文件分别为两法刑事案件信息两法行政案件信息目前模拟的两个xml文件单词导入的业务数据量在20000~30000条左右对应两张数据库表为[Sys_TwoLawsConvergence_AdministrationCase]、[Sys_TwoLawsConvergence_PoliceCase]表结构及具体字段如下所示。 其中主键并非为自增主键的维护由对接应用系统统一提供目前并未建立任何索引后期准备深入研究一下 sql server 的 b树索引及位图索引。 考虑到同时向两张数据表插入数据除去使用多线程同时写入外.net framework 4.0 提供了新的Task Parallel Library(任务并行库TPL)它支持数据并行、任务并行和流水线。在此业务场景我采用了最简单的方法及Parallel类的Invoke方法通过Stopwatch准确测量并行执行插入数据与串行执行插入数据在执行效率上的对比。
二、具体实现 定义了NetCloudPoliceInsertData、NetCloudAdministrationInserData类分别为两法刑事案件信息写入类及两法行政案件信息写入类具体结构及方法如下 1NetCloudPoliceInsertData类 其中DataAccessFactory.Instance().GetDataAccess(Sql Server)DataAccessFactory为自定义的数据访问类此处工厂模式保证工厂类对象在内存中有且仅有一个每一次GetDataAccess()都会创建一个数据库连接非连接池的方式写入库表的方式采用批量执行 2NetCloudAdministrationInserData类 三、并行执行与串行执行效率比较
1 Execute 其中 Parallel静态类的Invoke方法注释为【尽可能并行执行提供的每个操作】在输出执行语句后可以看到并行执行的执行效果如下图所示 四、运行结果比较
并行执行结果时间
串行执行结果时间
并行执行在时间上比串行执行时间上少2分钟左右此次导入的数据量为20000条后期会追加大数量的导入以检验并行执行的效果。