|
本帖最后由 宇智波·佐助 于 2019-4-9 15:27 编辑
课程讲解 知识点 多线程控制线程数量/委托/队列/文件操作
用易语言的方法 学习c# 除了关键字 不一样 其它基本上 是差不多的我们用一个实战批量采集图片来讲解
1.调用http类库 访问网页
2.扩展类库 封装我们常用的类库(类似易语言里的模块)
3.调试网页完成功能
4.调用json解析文本
5.布局界面
6.多线程采集信息
7.控制线程数量
8.数据结构之队列
9.优化多线程
Vs 2017 安装教程
https://bbs.125.la/forum.php?mod=viewthread&tid=14339179&highlight=vs
2.基本流程图
为什么要用队列 我们主线程获取一些文本信息 用来展示 如果子线程里 一次下载过多图片 肯定会卡 我们把图片下载线程 独立出来 不影响 信息的显示
队列:什么是队列?又该怎么理解呢?
①队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
c# Thread、ThreadPool、Task
这三者都是为了处理耗时任务,都是异步的;
先说 Thread与ThreadPoll
前台线程:主程序必须等待线程执行完毕后才可退出程序。Thread默认为前台线程,也可以设置为后台线程
后台线程:主程序执行完毕后就退出,不管线程是否执行完毕。ThreadPool默认为后台线程
线程消耗:开启一个新线程,线程不做任何操作,都要消耗1M左右的内存
ThreadPoll是线程池 其目的是为了减少开启新线程消耗的资源(使用线程池中的空闲线程,不必在开启新线程,以及统一管理线程(线程池中的线程执行完毕后,回归到线程池里,等待新任务).
总结:ThreadPoll性能优于Thread,但是Thread和ThreadPoll对线程的控制都不是很好,例如线程等待(线程执行一段时间无响应后,直接停止线程,释放资源 等 都没有直接的API来控制 只能通过硬编码来实现,同时ThreadPool使用的是线程池全局队列,全局队列中的线程依旧会存在竞争共享资源的情况,从而影响性能。
然后task
Task的背后的实现也是使用了线程池线程,但它的性能优于ThreadPoll,因为它使用的不是线程池的全局队列,而是使用的本地队列,使线程之间的资源竞争减少。同时Task提供了丰富的API来管理线程、控制。但是相对前面的两种耗内存,Task依赖于CPU对于多核的CPU性能远超前两者,单核的CPU三者的性能没什么差别。
教程下载 附源码
提取码:https://share.weiyun.com/57XyBE9演示效果
|
评分
-
查看全部评分
|