异步 多线程 线程池
2015-11-12 16:56
344 查看
线程池:IIS维护一个线程池,当请求抵达,会从池中获取一个空闲线程处理他,处理完毕后,线程不会回收,而是重新释放到池中。但线程池有最大容量,当超过容量时,新的请求会被放到一个请求队列中等待被释放线程。(ThreadPool)
线程:处理http请求的线程。(Thread)
线程池的好处:
1.频繁的创建释放线程,极大损害性能,线程池机制使线程得到了最大的复用,提高服务器吞吐能力。
2.线程池的最大容量限制,避免了在高并发情况下因为线程的无限创建而导致服务器崩溃。
何时采用异步:
异步操作主要用来处理耗时处理,主要用于I/O操作:文件I/O,网络I/O;文件是指对文件读写,网络是指请求数据库,或者远程服务调用。
异步技术: Asny await
asny 后面必须是Task,Task<>,void;声明是异步模式。
await:等待该异步模式执行完毕后,才继续执行下一条语句。
线程:处理http请求的线程。(Thread)
线程池的好处:
1.频繁的创建释放线程,极大损害性能,线程池机制使线程得到了最大的复用,提高服务器吞吐能力。
2.线程池的最大容量限制,避免了在高并发情况下因为线程的无限创建而导致服务器崩溃。
何时采用异步:
异步操作主要用来处理耗时处理,主要用于I/O操作:文件I/O,网络I/O;文件是指对文件读写,网络是指请求数据库,或者远程服务调用。
异步技术: Asny await
asny 后面必须是Task,Task<>,void;声明是异步模式。
await:等待该异步模式执行完毕后,才继续执行下一条语句。
public class AsyncClass { public void Main() { Console.WriteLine(string.Format("main threadid is {0}", Thread.CurrentThread.ManagedThreadId)); var result= Test().Result; Console.WriteLine(result); Console.ReadKey(); } public async Task<string> Test() { // 方法打上async关键字,就可以用await调用同样打上async的方法 // await 后面的方法将在另外一个线程中执行 var name1 = GetName1(); var name2 = GetName2(); return string.Format("1:{0} ,2:{1}", await name1, await name2); } public async Task<string> GetName1() { Console.WriteLine("GetName1 Start!"); await Task.Delay(4000); Console.WriteLine("GetName1 End!"); return "GetName1"; } public async Task<string> GetName2() { Console.WriteLine("GetName2 Start"); await Task.Delay(6000); Console.WriteLine("GetName2 End!"); return "GetName2"; } }
相关文章推荐
- 【金】nginx+uwsgi+django+python 应用架构部署
- Windows CMD命令大全
- 一直在DEBUG整理
- windows 多线程捕获未处理的异常,防止崩溃的地方影响到其它线程
- 网络流量测试方法
- XML入门(一)
- ARM Linux系统调用的原理
- 用python + openpyxl处理excel(07+)文档 + 一些中文处理的技巧
- jQuery 获取屏幕高度、宽度
- Spring、AOP详解
- jquery 元素控制(追加元素/追加内容)介绍及应用
- linux下C获取系统时间的方法
- iOS时间戳的处理
- caffe在windows编译工程及运行mnist数据集测试
- 自定义View学习之12/3(仿Twitter拍照按钮)
- ArrayAdapter的使用
- 一方库、二方库、三方库
- hive 学习笔记
- slabtop 监控实时内核片缓存信息
- ioctl()函数获取本机IP、MAC