怎样做自己的视频网站,网站推广软件哪个好,用ps做网站还是wd,如何远程登录网站服务器1.1. I/O编程模型浅析
服务器端编程经常需要构造高性能的IO模型#xff0c;常见的IO模型有四种#xff1a;
#xff08;1#xff09;同步阻塞IO#xff08;Blocking IO#xff09;#xff1a;即传统的IO模型。
#xff08;2#xff09;同步非阻塞IO#xff08;Non…1.1. I/O编程模型浅析
服务器端编程经常需要构造高性能的IO模型常见的IO模型有四种
1同步阻塞IOBlocking IO即传统的IO模型。
2同步非阻塞IONon-blocking IO默认创建的socket都是阻塞的非阻塞IO要求socket被设置为NONBLOCK。
3IO多路复用IO Multiplexing即经典的Reactor设计模式有时也称为异步阻塞IOJava中的Selector和Linux中的epoll都是这种模型。
4异步IOAsynchronous IO即经典的Proactor设计模式也称为异步非阻塞IO。
同步和异步的概念描述的是用户线程与内核的交互方式
同步是指用户线程发起IO请求后需要等待或者轮询内核IO操作完成后才能继续执行异步是指用户线程发起IO请求后仍继续执行当内核IO操作完成后会通知用户线程或者调用用户线程注册的回调函数。
阻塞和非阻塞的概念描述的是用户线程调用内核IO操作的方式
阻塞是指IO操作需要彻底完成后才返回到用户空间非阻塞是指IO操作被调用后立即返回给用户一个状态值无需等到IO操作彻底完成。 1.2. 同步阻塞I/O
同步阻塞I/O模型是最简单的I/O模型用户进程在进行I/O操作时被阻塞如下图所示 在ASP.NET Core中没有使用多线程或加入异步关键字的模型均为同步阻塞I/O
public IActionResult Sync() { var start DateTime.Now;Add(); return Json(start:start||| end: DateTime.Now);} void Add() {Thread.Sleep(2000);Console.WriteLine(DateTime.Now); }
1.3. 同步非阻塞I/O
在同步非阻塞整个IO请求的过程中虽然用户线程每次发起IO请求后可以立即返回但是为了等到数据仍需要不断地轮询、重复请求消耗了大量的CPU的资源。一般很少直接使用这种模型而是在其他IO模型中使用非阻塞IO这一特性 在ASP.NET Core 中可以使用多线程来实现同步非阻塞在如下代码清单中可以看到使用多线程调用一个会自动休眠2秒的方法主线程Sync会先返回值而不会阻塞。
public IActionResult Sync() { var thread new Thread(new ThreadStart(this.Add));thread.Start(); return Json(DateTime.Now);} void Add() {Thread.Sleep(2000);Console.WriteLine(DateTime.Now);} 而子线程由于被阻塞了2秒因此时间为 如果想在同步非阻塞的情况下获得返回的数据就需要轮询重复的对线程请求。代码清单中使用while循环轮询线程。
public IActionResult Sync() { short num 10; var thread new Thread(new ParameterizedThreadStart(this.Add));thread.Start(num); while (thread.IsAlive) ; return Json(DateTime.Now result: result);} void Add(object num) {Thread.Sleep(2000); this.result (short)num ;Console.WriteLine(DateTime.Now);} 1.4. 异步I/O
真正的异步IO需要操作系统更强的支持。在异步IO模型中当用户线程收到通知时数据已经被内核读取完毕并放在了用户线程指定的缓冲区内内核在IO完成后通知用户线程直接使用即可。 public IActionResult Async() { var start DateTime.Now; short num 10; var result Add(num).Result; return Json(start: start end: DateTime.Now ||| result: result);} async Taskshort Add(short num) { await Task.Delay(2000); return num;} 关于异步的更详细的使用可参看 http://www.cnblogs.com/vipyoumay/p/5663950.html 1.5. 总结
1.同步与异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)
所谓同步就是在发出一个 调用 时在没有得到结果之前该调用就不返回。但是一旦调用返回就得到返回值了。换句话说就是由调用者主动等待这个调用的结果。而异步则是相反调用在发出之后这个调用就直接返回了所以没有返回结果。换句话说当一个异步过程调用发出后调用者不会立刻得到结果。而是在调用发出后被调用者通过状态、通知来通知调用者或通过回调函数处理这个调用。 你打电话问书店老板有没有《分布式系统》这本书如果是同步通信机制书店老板会说你稍等”我查一下然后开始查啊查等查好了可能是5秒也可能是一天告诉你结果返回结果。而异步通信机制书店老板直接告诉你我查一下啊查好了打电话给你然后直接挂电话了不返回结果。然后查好了他会主动打电话给你。在这里老板通过“回电”这种方式来回调。 2. 阻塞与非阻塞关注的是程序在等待调用结果消息返回值时的状态.
阻塞调用是指调用结果返回之前当前线程会被挂起。调用线程只有在得到结果之后才会返回。非阻塞调用指在不能立刻得到结果之前该调用不会阻塞当前线程。 你打电话问书店老板有没有《分布式系统》这本书你如果是阻塞式调用你会一直把自己“挂起”直到得到这本书有没有的结果如果是非阻塞式调用你不管老板有没有告诉你你自己先一边去玩了 当然你也要偶尔过几分钟check一下老板有没有返回结果。在这里阻塞与非阻塞与是否同步异步无关。跟老板通过什么方式回答你结果无关 【1】http://www.jianshu.com/p/77332a3b07b5
【2】http://kb.cnblogs.com/page/85931
【3】https://www.zhihu.com/question/19732473
相关文章
.NET Core 2.0 正式发布信息汇总.NET Standard 2.0 特性介绍和使用指南.NET Core 2.0 的dll实时更新、https、依赖包变更问题及解决.NET Core 2.0 特性介绍和使用指南Entity Framework Core 2.0 新特性体验 PHP under .NET Core.NET Core 2.0使用NLog升级项目到.NET Core 2.0在Linux上安装Docker并成功部署解决Visual Studio For Mac Restore失败的问题ASP.NET Core 2.0 特性介绍和使用指南.Net Core下通过Proxy 模式 使用 WCF.NET Core 2.0 开源Office组件 NPOIASP.NET Core Razor页面 vs MVCRazor Page–Asp.Net Core 2.0新功能 Razor Page介绍MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移Migration介绍及示例.NET Core 2.0迁移技巧之web.config配置文件asp.net core MVC 过滤器之ExceptionFilter过滤器(一)ASP.NET Core 使用Cookie验证身份ASP.NET Core MVC – Tag Helpers 介绍ASP.NET Core MVC – Caching Tag HelpersASP.NET Core MVC – Form Tag HelpersASP.NET Core MVC – 自定义 Tag HelpersASP.NET Core MVC – Tag Helper 组件ASP.Net Core Razor 页面路由粗略使用.NetCore2.0自带授权登陆AuthorizeASP.NET Core 2.0 自定义 _ViewStart 和 _ViewImports 的目录位置
原文地址http://www.cnblogs.com/vipyoumay/p/7487389.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注