1 进程、线程、同步、异步的概念
1.1 进程
进程:程序在服务器上运行时,占据的计算机资源的合集,称之为进程。
进程之间不会相互干扰-----进程间的通信比较困难
1.2 线程、多线程
线程:程序执行的最小单位,响应操作的最小执行流。
线程也包含自己的计算资源。
线程是属于进程的,一个进程可以有多个线程。
线程是应用程序的一个概念,跟计算机语言没有直接关系
多线程:一个进程里面,有多个线程并发执行
C#:
多线程Thread:是一个类,就是一个封装,是.NetFramework对线程对象的抽象封装
通过Thread去完成的操作,最终是通过向操作系统请求得到的执行流。
CurrentThread:当前线程-----任何操作执行都是线程完成的,运行当前这句话的线程
ManagedThreadId:是.Net平台给Thread起的名字,就是一个int值,尽量不重复
同步单线程方法:按顺序执行,每次完成执行后才能进入下一行,是同一个线程运行
异步多线程:发起调用,不等待结束就直接进入下一行(主线程)。动作会由一个新线程来执行(子线程):并发了
任何的异步多线程都离不开委托delegate-lambda-action-func
单线程和多线程的区别
- 卡不卡界面
同步单线程方法:卡界面 ---主线程(UI线程)忙于计算,所以不能响应
异步多线程方法:不卡界面 ---计算任务交给子线程,主线程(UI线程)已经闲置,可以响应别的操作。
- 消耗时间的区别
同步单线程方法慢---因为只有一个线程计算
异步多线程方法快---因为多个线程并发计算
线程并不是越多越好
同步单线
- 是否有序
(1)同步单线程方法有序
(2)异步多线程方法无序(不可预测性):
异动无序:几乎同一时间向操作系统请求线程,也是个需要CPU处理的请求,
因为线程是系统操作资源,CLR只能去申请,具体是什么顺序,无法掌控
‚执行时间不确定:同一个线程同一个任务耗时也可能不同
跟操作系统的调度策略有关
CPU分片(计算能力太强,1s分拆1000份儿,宏观上就变成并发的),那任务执行过程就看运气了—线程的优先级可以影响操作系统的调度
ƒ结束无序
正是因为多线程具备不可预测性,很多时候你的想法并不一定能够贯彻实施,也许大多数情况是ok的,但是总有一定的概率出问题
CS:按钮后能不卡死--上传文件不卡死
BS:用户注册发邮件/发短信/写日志
使用多线程时,用通过延时等方式去掌控顺序,不要试图用风骚的多模式掌控顺序
1.3 多线程安全问题
定义:一段代码,单线程执行和多线程执行结果不一致,就表明有线程安全问题
List是个数组结构,在内存上是连续摆放的,假如同一时刻,去增加一个数据,都是操作
同一个内存位置,2个CPU同时发了命令,内存先执行一个再执行一个,就出现覆盖。
加lock就能解决线程安全问题—就是单线程化---Lock就是保证方法块任意时刻只有一个线
程能进去,其他线程就排队---单线程化
Lock原理—锁定一个内存引用地址—所以不能是值类型,也不能是null
如果共用一个锁变量,就会出现相互阻塞
锁不同的变量,才能并发
字符串是享元的,
泛型类,在类型参数相同时,是同一个类,在类型参数不同时,是不同的类
相关链接:https://www.bilibili.com/video/BV1if4y1y7Vn?p=1
标签:异步,执行,单线程,---,线程,多线程 来源: https://www.cnblogs.com/hobelee/p/16439334.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。