当前位置: 首页 > news >正文

网站开发绩效指标wordpress手机导航条怎么做

网站开发绩效指标,wordpress手机导航条怎么做,个人网页,阿里云做网站预装环境2019独角兽企业重金招聘Python工程师标准 最近看到“服务器并发处理能力”章节#xff0c;被里面的“I/O模型“搞得有点头晕#xff0c;所以这里希望通过概念的辨析和对比#xff0c;能更好的理解Linux的 I/O模型。 同步#xff08;synchronous#xff09;… 2019独角兽企业重金招聘Python工程师标准 最近看到“服务器并发处理能力”章节被里面的“I/O模型“搞得有点头晕所以这里希望通过概念的辨析和对比能更好的理解Linux的 I/O模型。 同步synchronous IO和异步asynchronous IO阻塞blocking IO和非阻塞non-blockingIO分别是什么到底有什么区别 比较常用的IO Model有以下4种 blocking IO、nonblocking IO、IO multiplexing、asynchronous IO 由于signal driven IO在实际中并不常用所以我这只提及剩下的四种IO Model。 1、blocking IO 用户进程进行I/O操作一直阻塞到I/O操作完成为止。 示例代码 while ( (nread(STDIN_FILENO, buf, BUFSIZ) ) 0)if (write (STDOUT_FILENO, buf, n) ! n)err_sys (write error ”) ; 在linux中默认情况下所有的socket都是blocking当用户进程调用了recvfrom这个系统调用kernel就开始了IO的第一个阶段准备数据。对于network io来说很多时候数据在一开始还没有到达比如还没有收到一个完整的UDP包这个时候kernel就要等待足够的数据到来。而在用户进程这边整个进程会被阻塞。当kernel一直等到数据准备好了它就会将数据从kernel中拷贝到用户内存然后kernel返回结果用户进程才解除block的状态重新运行起来。 所以blocking IO的特点就是在IO执行的两个阶段都被block了。 2、non-blocking IO linux下可以通过设置socket使其变为non-blocking。当对一个non-blocking socket执行读操作时流程是这个样子 //nbtest.c #include stdio.h #include unistd.h #include fcntl.h #include stdlib.h #include errno.hchar buffer[4096];int main(int argc, char **argv) {int delay 1, n, m 0;if (argc 1)delayatoi(argv[1]);fcntl(0, F_SETFL, fcntl(0,F_GETFL) | O_NONBLOCK); /* stdin */fcntl(1, F_SETFL, fcntl(1,F_GETFL) | O_NONBLOCK); /* stdout */while (1) {n read(0, buffer, 4096);if (n 0)m write(1, buffer, n);if ((n 0 || m 0) (errno ! EAGAIN))break;sleep(delay);}perror(n 0 ? stdin : stdout);exit(1); } 我们用strace来跟踪一下程序执行的结果 out.txt的内容如下 可以清楚的看到read读取失败的情况。实际上该方式需要应用程序以一种轮询的方式来实现数据读取多次无谓的系统调用会加大系统开销影响应整个系统的吞吐量。 3、IO multiplexing IO multiplexing这个词可能有点陌生但是如果我说selectepoll大概就都能明白了。有些地方也称这种IO方式为event driven IO。我们都知道select/epoll的好处就在于单个process就可以同时处理多个网络连接的IO。它的基本原理就是select/epoll这个function会不断的轮询所负责的所有socket当某个socket有数据到达了就通知用户进程。它的流程如图 当用户进程调用了select那么整个进程会被block而同时kernel会“监视”所有select负责的socket当任何一个socket中的数据准备好了select就会返回。这个时候用户进程再调用read操作将数据从kernel拷贝到用户进程。 这个图和blocking IO的图其实并没有太大的不同事实上还更差一些。因为这里需要使用两个system call (select 和 recvfrom)而blocking IO只调用了一个system call (recvfrom)。但是用select的优势在于它可以同时处理多个connection。多说一句。所以如果处理的连接数不是很高的话使用select/epoll的web server不一定比使用multi-threading blocking IO的web server性能更好可能延迟还更大。select/epoll的优势并不是对于单个连接能处理得更快而是在于能处理更多的连接。 在IO multiplexing Model中实际中对于每一个socket一般都设置成为non-blocking但是如上图所示整个用户的process其实是一直被block的。只不过process是被select这个函数block而不是被socket IO给block。 #include stdio.h #include unistd.h #include stdlib.h #include errno.h #include sys/poll.h #include fcntl.hchar buffer[4096];int main(int argc, char **argv) {struct pollfd pfd;int n;fcntl(0, F_SETFL, fcntl(0,F_GETFL) | O_NONBLOCK); /* stdin */pfd.fd 0; /* stdin */pfd.events POLLIN;while (1) {nread(0, buffer, 4096);if (n 0)write(1, buffer, n);n poll(pfd, 1, -1);if (n 0)break;}perror( n0 ? stdin : stdout);exit(1); } 我们用strace来跟踪一下程序执行的结果 out.txt文件 该方式中select(或poll)的调用仍然会阻塞进程与一般典型的I/O不一样的它是等待事件通知。但是它引入了超时机制可以让应用程序有权力避免过长时间等待另一方面如果应用程序需要读写多个文件该方式可以一显身手。典型的应用就是telnet命令(详细见《UNIX环境高级编程》)。 4、Asynchronous I/O linux下的asynchronous IO其实用得很少。先看一下它的流程 用户进程发起read操作之后立刻就可以开始去做其它的事。而另一方面从kernel的角度当它受到一个asynchronous read之后首先它会立刻返回所以不会对用户进程产生任何block。然后kernel会等待数据准备完成然后将数据拷贝到用户内存当这一切都完成之后kernel会给用户进程发送一个signal告诉它read操作完成了。 到目前为止已经将四个IO Model都介绍完了。现在回过头来回答最初的那几个问题blocking和non-blocking的区别在哪synchronous IO和asynchronous IO的区别在哪。 先回答最简单的这个blocking vs non-blocking。前面的介绍中其实已经很明确的说明了这两者的区别。调用blocking IO会一直block住对应的进程直到操作完成而non-blocking IO在kernel还准备数据的情况下会立刻返回。 在说明synchronous IO和asynchronous IO的区别之前需要先给出两者的定义。Stevens给出的定义其实是POSIX的定义是这样子的     A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes;     An asynchronous I/O operation does not cause the requesting process to be blocked;  两者的区别就在于synchronous IO做”IO operation”的时候会将process阻塞。按照这个定义之前所述的blocking IOnon-blocking IOIO multiplexing都属于synchronous IO。有人可能会说non-blocking IO并没有被block啊。这里有个非常“狡猾”的地方定义中所指的”IO operation”是指真实的IO操作就是例子中的recvfrom这个system call。non-blocking IO在执行recvfrom这个system call的时候如果kernel的数据没有准备好这时候不会block进程。但是当kernel中数据准备好的时候recvfrom会将数据从kernel拷贝到用户内存中这个时候进程是被block了在这段时间内进程是被block的。而asynchronous IO则不一样当进程发起IO 操作之后就直接返回再也不理睬了直到kernel发送一个信号告诉进程说IO完成。在这整个过程中进程完全没有被block。 各个IO Model的比较如图所示 经过上面的介绍会发现non-blocking IO和asynchronous IO的区别还是很明显的。在non-blocking IO中虽然进程大部分时间都不会被block但是它仍然要求进程去主动的check并且当数据准备完成以后也需要进程主动的再次调用recvfrom来将数据拷贝到用户内存。而asynchronous IO则完全不同。它就像是用户进程将整个IO操作交给了他人kernel完成然后他人做完后发信号通知。在此期间用户进程不需要去检查IO操作的状态也不需要主动的去拷贝数据。 最后再举几个不是很恰当的例子来说明这四个IO Model: 有ABCD四个人在钓鱼 A用的是最老式的鱼竿所以呢得一直守着等到鱼上钩了再拉杆 B的鱼竿有个功能能够显示是否有鱼上钩所以呢B就和旁边的MM聊天隔会再看看有没有鱼上钩有的话就迅速拉杆 C用的鱼竿和B差不多但他想了一个好办法就是同时放好几根鱼竿然后守在旁边一旦有显示说鱼上钩了它就将对应的鱼竿拉起来 D是个有钱人干脆雇了一个人帮他钓鱼一旦那个人把鱼钓上来了就给D发个短信。 转载于:https://my.oschina.net/linyouqing/blog/151101
http://www.sadfv.cn/news/286086/

相关文章:

  • 方圆网站建设长垣建设银行网站
  • 模板和网站是一体的吗梧州网站设计制作服务至上
  • 沈阳网站建设定制wordpress打包成app
  • 网站短期就业培训班怎么做vip视频网站
  • 做网站的背景怎么做公司网站建设公
  • 给一个网站风格做定义广州专业展台制作价格
  • 网站主页 优帮云桂林象鼻山的由来
  • 网站如何建设推广微信分销网站建设官网
  • 武强网站建设WordPress微博图片
  • 专门做电子书的网站邢台做网站咨询
  • 微信支付 企业网站甘肃手机版建站系统价格
  • 什么网站可以做数据调查问卷嵌入式软件开发面试问题
  • 网站推广策划包含的内容电子商务网站规划流程
  • 黄岩区建设规划局网站国际贸易网登录
  • 常见的管理信息系统有哪些南昌网站排名优化
  • 校园网站建设 德育制作网站一般要多少钱
  • 网站建设总结体会域名备案需要多少钱
  • 重庆网站制作1000wordpress 站点标题
  • 宁波江北建设局网站qq代刷网站推广免费
  • 上海网站设计开发公WordPress建站怎么交付
  • 十大效果图网站微信crm管理系统
  • 网站建设找星火龙制作网站的固定成本
  • 广东网站备案多长时间wordpress 个人博客主题
  • 分类信息网站怎么做SEO公司网站建设工作总结
  • 商丘网站网站建设公司代理
  • 品牌网站建设 蝌4蚪小公司网站开发的核心技术
  • 吉林网站建设电话怎么才能免费建网站
  • 广州网站建设招聘做网站怎么弄模板
  • 强化 门户网站建设wordpress官网的文档
  • 美好乡村建设网站网站建设会议记录