C#异步和线程

有几天没写博客了,挺忙的,没多少时间写!!最近在做一个App,对于菜鸟来说,那真是到处是坑!!!!

 

 

今天来看看线程和异步的问题:

1、 什么是线程和异步?

2、 线程和异步的区别?

3、 关于线程的点东西?

4、 关于异步的点东西?

 

 

分割线、分割线、分割线…………………………………………………………………………

 

第一个问题:

什么是线程和异步?

异步:异步是一个计算机硬件的功能,熟悉电脑硬件的朋友肯定对DMA这个词比较熟悉,硬盘、光驱技术规格中都有明确DMA的模式指标,其实网卡、声卡、显卡也是有DMA功能的,DMA就是直接内存访问的意思,也就是说,拥有DMA功能的硬件在和内存进行数据交换的时候可以不消耗CPU资源。只要CPU在发起数据传输时发送一个指令,硬件就开始自己和内存交换数据,在传输完成之后硬件会触发一个中断来通知操作完成(回调函数)。这些无需消耗CPU时间的I/O操作正是异步操作的硬件基础,所以即使在DOS这样的单线程系统中也同样发起异步的DMA操作。

线程:线程不是一个计算机硬件的功能,而是操作系统提供的一种逻辑功能,线程本质上是进程中一段并发运行的代码,所以线程需要操作系统投入CPU资源来运行和调度

 

第二个问题

线程和异步的区别?

异步操作无需额外的线程负担,并且使用回调的方式进行处理,在设计良好的情况下,处理函数可以不必使用共享变量,减少了死锁的可能,异步操作复杂性相当高,程序主要使用回调方式进行处理,与普通人思维方式有些出入,而且难以调试。

多线程的优点很明显,线程中的处理程序依然是顺序执行,符合普通人的思维习惯,所以编程简单。但是多线程的使用,滥用,会给系统带来上下文切换的额外负担,并且线程间变量共享可能造成死锁的出现。

 

 

第三个问题:

关于线程的点东西?

Thread类,创建并控制线程,设置其优先级并获取其状态。线程的挂起、恢复和终止

http://msdn.microsoft.com/zh-cn/library/system.threading.thread(v=vs.110).aspx

 

第四个问题:

关于异步的点东西?

异步调用就是你 喊你朋友吃饭 ,你朋友说知道了 ,待会忙完去找你 ,你就去做别的了。

同步调用就是你 喊你朋友吃饭 ,你朋友在忙 ,你就一直在那等,等你朋友忙完了,你们一起去。

 

 

注意:

所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去

 

【参考】http://kb.cnblogs.com/page/116095/

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用异步多线程的简单示例: ```csharp using System; using System.Threading; using System.Threading.Tasks; class Program { static async Task Main() { // 使用异步编程模型创建并发执行的异步任务 Task task1 = Task.Run(async () => { await Task.Delay(1000); // 模拟耗时操作 Console.WriteLine("任务1完成"); }); Task task2 = Task.Run(async () => { await Task.Delay(2000); // 模拟耗时操作 Console.WriteLine("任务2完成"); }); // 使用多线程创建并发执行的任务 Thread thread1 = new Thread(() => { Thread.Sleep(3000); // 模拟耗时操作 Console.WriteLine("任务3完成"); }); Thread thread2 = new Thread(() => { Thread.Sleep(4000); // 模拟耗时操作 Console.WriteLine("任务4完成"); }); // 启动异步任务和线程 task1.Start(); task2.Start(); thread1.Start(); thread2.Start(); // 等待所有任务和线程完成 await Task.WhenAll(task1, task2); thread1.Join(); thread2.Join(); Console.WriteLine("所有任务和线程已完成"); } } ``` 在上面的示例中,我们使用异步编程模型创建了两个异步任务(task1 和 task2),并使用多线程创建了两个线程thread1 和 thread2)。每个任务和线程都模拟了一些耗时操作。 通过调用 Start() 方法启动异步任务和线程,并使用 await Task.WhenAll() 方法等待所有任务和线程完成。最后输出 "所有任务和线程已完成"。 这个示例展示了如何同时使用异步编程模型和多线程来实现异步多线程。你可以根据自己的需求修改和扩展代码。 希望这个示例对你有所帮助。如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值