C# Thread、delegate、Task三种异步进行对比

1.Thread 【线程】

不断创建 Thread 会消耗很大的cup 导致 异步效率变慢

2.delegate【委托异步】

由于需要不断的实例化 委托类 将会消耗cup 和 内存

3.Task 【结合  async】

这种是三种中性能最好的  较低的cup和内存损耗

下面是例子:

#region 委托异步 和  asycn 异步进行对比
        /// <summary>
        /// 运行
        /// </summary>
        /// <param name="count"></param>
        static void Run(int count)
        {

// TestTreed(  count);
            TestAsycnTask(count);
         //   TestDelegate(count);

}

/// <summary>
        /// 损耗cup 而且创建速度慢
        /// </summary>
        /// <param name="count"></param>
        static void TestTreed(int count)
        {
            for (int i = 0; i < count; i++)
            {
                //  Console.WriteLine("开始计算");
                new Thread(a =>
                {
                    Console.WriteLine(i);
                }).Start();
            }

}
        //***************Task 部分

/// <summary>
        /// Task异步
        /// </summary>
        /// <param name="i"></param>
        /// <returns></returns>
        static async Task<int> AsyncTask(int i)
        {

// await Task.Delay(1500);
            Console.WriteLine(i);
            return i;
        }

/// <summary>
        /// 测试 asycn 只会消耗小部分 cup
        /// </summary>
        /// <param name="count"></param>
        static void TestAsycnTask(int count)
        {
            for (int i = 0; i < count; i++)
            {
              //  Console.WriteLine("开始计算");
                 AsyncTask(i);//直接就异步了
            }
            
        }

//********************************委托部分

private delegate int _delegate(int i);
        /// <summary>
        /// 因为创建  委托  所以会消耗内存  和cup
        /// </summary>
        /// <param name="count"></param>
        static void TestDelegate(int count)
        {
            for (int i = 0; i < count; i++)
            {
                var d = new _delegate(Delegte);
                var r = d.BeginInvoke(i, null, null);

}
        }

/// <summary>
        /// 委托函数
        /// </summary>
        /// <param name="i"></param>
        /// <returns></returns>
        static int Delegte(int i)
        {
            Console.WriteLine(i);
            return i;
        }

#endregion

时间: 2024-08-01 12:41:49

C# Thread、delegate、Task三种异步进行对比的相关文章

java创建线程的三种方式及其对比

Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实例,即创建了线程对象. (3)调用线程对象的start()方法来启动该线程. package com.thread; public class FirstThreadTest extends Thread{ int i = 0; //重写run方法,run方法的方

并发编程(壹):创建线程的三种方式及其对比

创建线程的三种方式及其对比 1. 继承 Thread类 (1). 继承Thread类.并重写run()方法,该方法无参数,无返回值: (2). 创建子类实例,并实例化对象: (3). 通过start()方法启动,注意:不是通过run()方法启动. public class ThreadDemo extends Thread{ public void run(){ System.out.println("继承Thread创建线程的."); } } public class ThreadA

.NET三种异步模式(APM、EAP、TAP)

APM模式: .net 1.0时期就提出的一种异步模式,并且基于IAsyncResult接口实现BeginXXX和EndXXX类似的方法. .net中有很多类实现了该模式(比如HttpWebRequest),同时我们也可以自定义类来实现APM模式(继承IAsyncResult接口并且实现BeginXXX和EndXXX方法) 1 /// <summary> 2 /// 异步 3 /// </summary> 4 /// <param name="sender"

简述三种异步上传文件方式

 很久没写过博客了! 上次写已经是去年的12月了,离现在也有足足三个月了.这几个月因为要搭建个人网站以及准备个人简历,包括最近要准备最近的各大公司的实习春招,很难抽时间来写博客,这次的异步文件上传我觉得是很有必要了解的,笼络了很多知识点,因此准备写一篇博客来巩固下. 异步上传文件是为了更好的用户体验,是每个前端必须掌握的技能.这里我提出三点有关异步文件上传的方式. 使用第三方控件,如Flash,ActiveX等浏览器插件上传. 使用隐藏的iframe模拟异步上传. 使用XMLHttpReques

js的三种异步处理

Promise 对象 含义: Promise是异步编程的一种解决方案, 优点: 相比传统回调函数和事件更加合理和优雅,Promise是链式编程(后面会详细讲述),有效的解决了令人头痛的回调地狱问题,Promise的结果有成功和失败两种状态,只有异步操作的结果,可以决定当前是哪一种状态,外界的任何操作都无法改变这个状态 基本用法: //ES6 规定,Promise对象是一个构造函数,用来生成Promise实例. const p = new Promise(function(resolve,reje

菜鸟学习Spring——SpringIoC容器基于三种配置的对比

一.概述 对于实现Bean信息定义的目标,它提供了基于XML.基于注解及基于java类这三种选项.下面总结一下三种配置方式的差异. 二.Bean不同配置方式比较. 三.Bean不同配置方式的适用场合. 四.总结. 一般我们适用XML配置DataSource.SessionFactory等资源的Bean,在XML中利用aop.context命名空间进行主题的配置.其他所有项目中开发的Bean用注解的形式来配置.这就是采用了"XML+基于配置"的配置方式,很少采用基于Java类的配置方式.

PHP5.5三种序列化性能对比

json_encode,serialize,igbinary三种序列化方式,在之前已经有过相关的测试,PHP5.5这方面的测试暂时没有,这次测试基于PHP5.5,并且测试用例,http://blog.csdn.net/hguisu/article/details/7651730的测试用例是一样的,只是从这个测试上家里igbinary serialize的测试,作为对比,可以参考http://www.ooso.net/archives/538 运行环境        PHP5.5 内存 16G 8

Storm 系列(六)—— Storm 项目三种打包方式对比分析

一.简介 在将 Storm Topology 提交到服务器集群运行时,需要先将项目进行打包.本文主要对比分析各种打包方式,并将打包过程中需要注意的事项进行说明.主要打包方式有以下三种: 第一种:不加任何插件,直接使用 mvn package 打包: 第二种:使用 maven-assembly-plugin 插件进行打包: 第三种:使用 maven-shade-plugin 进行打包. 以下分别进行详细的说明. 二.mvn package 2.1 mvn package的局限 不在 POM 中配置

Hive快捷查询:不启用Mapreduce job启用Fetch task三种方式介绍

如果查询表的某一列,Hive中默认会启用MapReduce job来完成这个任务,如下: hive>select id,name from m limit 10;--执行时hive会启用MapReduce job 我们都知道,启用MapReduce Job是会消耗系统开销的.对于这个问题,从Hive0.10.0版本开始,对于简单的不需要聚合的类似 SELECT <col> from <table> LIMIT n语句,不需要起MapReduce job,直接通过Fetch t