新锐下载

下你所需,载你所想!
IT技术源码资料下载网站

易语言转C#实战开发交友网站图片采集器视频教程

作者:清柠 人气: 来源:视频教程 2019-10-17 11:04:14

易语言转C#实战开发交友网站图片采集器视频教程

多线程控制线程数量/委托/队列/文件操作
1.调用http类库 访问网页
2.扩展类库 封装我们常用的类库(类似易语言里的模块)
3.调试网页完成功能
4.调用json解析文本
5.布局界面
6.多线程采集信息
7.控制线程数量
8.数据结构之队列
9.优化多线程

为什么要用队列 我们主线程获取一些文本信息 用来展示 如果子线程里 一次下载过多图片 肯定会卡 我们把图片下载线程 独立出来 不影响 信息的显示
队列:什么是队列?又该怎么理解呢?
①队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(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三者的性能没什么差别。

官方微信二维码 新锐官方微信公众号