多线程同步与单线程异步对比
【文章来自:项籍】

阻塞与线程

什么是阻塞(block)呢?线程在执行屮如果遇到磁盘读写或网络通信(统称为I/O操作),通常要消耗较长的时间,这时操作系统会剥夺这个线程的CPU控制权,使其暂停执行,同时将资源让给其他的工作线程,这种线程调度方式称为阻塞。当I/O操作完毕时,操作系统将这个线程的阻塞状态解除,恢复其对CPU的控制权,令其继续执行。这种I/O模式就是通常的同步式I/O( SynchronousI/O)或阻塞式I/O( Blocking I/O)。

相应地,异步式I/O (Asynchronous I/O)或非阻塞式I/O (Non-blocking I/O)则针对所有I/O操作不采用阻塞的策略。当线程遇到I/O操作时,不会以阻塞的方式等待I/O操作的完成或数据的返回,而只是将I/O 请求发送给操作系统,继续执行下一条语句。当操作系统完成I/O操作时,以事件的形式通知执行I/O操作的线程,线程会在特定时候处理这个事件。为了处理异步I/O,线程必须有事件循环,不断地检查有没有未处理的事件,依次于以处理

单线程事件驱动的异步式I/O比传统的多线程阻塞式I/O究竞好在哪呢?简而言之,异步式I/O就是少了多线程的开销。对操作系统来说,创建一个线程的代价足十分昂贵的,需要给它分配内存、列入调度,同时在线程切换的时候还要执行内存换页? CPU的缓存被被清空,切换回来的时候还要重新从内存中读取倍息.破坏了数据的局部性。

当然,异步式编程的缺点在于不符合人们一般的程序设计思维,容易让控制流变得晦涩难懂,绐编码和调试都带来不小的闲难,习惯传统编程模式的开发者在刚刚接触到大规校的异步式应用时往往会无所适从,但慢慢习惯后会好很多。尽管如此,异步式编程还是较为闲难, 不过可喜的是观在已经有了不少专门解决异步式编程问题的库(如async )。

热门文章

重视你手中的铁钉
【文章来自:遇见】

在英国曾经流传一段民谣:“少了一个铁钉……


简单的事做好就是不简单
【文章来自:Malcolm】

行动应关注细节所在。冶大国如烹小鲜……


一起从细节开始
【文章来自:Irene】

中国古代有这样一个故事:临近黄河岸边有一……


关于财富的神话,总是让人充满好奇
【文章来自:雨】

一个矿泉水瓶盖有几个齿?虽然我们经常喝……


责任与担当
【文章来自:快乐】

什么是责任?有人诠释的很精妙——它包括……


细节差之毫厘,结果谬
【文章来自:Sophie】

中国道家创始人老子有句名言:天下大事必……


品质生活,来源于细节
【文章来自:耳朵】

起因要从一件小事儿说起。那天我开始例行……


中华礼仪用语
【文章来自:on the way】

头次见面用久仰,很久不见说久违……


活在过去,还是放眼未来?
【文章来自:larry】

本周在欧洲举行的TheServerSide Java研……


多线程同步与单线程异步对比
【文章来自:项籍】

什么是阻塞(block)呢?线程在执行屮如果……


磁盘占用百分百?Windows 10必做各项优化
【文章来自:无忧天使】

很多用户在安装好Win10系统之后总感觉运……


金笛短信设备与组态王集成温度报警方案
【文章来自:金笛后花园】

硬件功能概述:金笛MG35短信设备与西门子……


金笛短信猫用于网络运行监控系统
【文章来自:金笛后花园】

对全网的各类网络设备、安全设备、主机……


金笛短信猫应用网络告警监控
【文章来自:金笛短信论坛】

北京某科技公司应用金笛短信猫及WEB版中……


金笛短信在医院预约平台应用
【文章来自:金笛短信论坛】

有些病患通过短信预约之后,常常会忘记……