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

有域名怎么建网站小网站关键词搜什么

有域名怎么建网站,小网站关键词搜什么,自定义wordpress的字体大小,wordpress mip imgLinux IO模型 网络IO的本质是socket的读取,socket在linux系统被抽象为流,IO可以理解为对流的操作。刚才说了,对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操…

Linux IO模型

网络IO的本质是socket的读取,socket在linux系统被抽象为流,IO可以理解为对流的操作。刚才说了,对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间。所以说,当一个read操作发生时,它会经历两个阶段:

  1. 第一阶段:等待数据准备 (Waiting for the data to be ready)。

  2. 第二阶段:将数据从内核拷贝到进程中 (Copying the data from the kernel to the process)。

对于socket流而言,

  1. 第一步:通常涉及等待网络上的数据分组到达,然后被复制到内核的某个缓冲区。

  2. 第二步:把数据从内核缓冲区复制到应用进程缓冲区。

1、阻塞IO模型 

在 linux 中,默认情况下所有的 socket 都是阻塞的。

对于socket流而言,

  1. 第一步:通常涉及等待网络上的数据分组到达,然后被复制到内核的某个缓冲区。

  2. 第二步:把数据从内核缓冲区复制到应用进程缓冲区。

当用户进程调用了 read 这个系统调用, kernel 就开始了 IO 的第一个阶段:准备数据。对于network io 来说,很多时候数据在一开始还没有到达(比如,还没有收到一个完整的数据包),这个时候 kernel 就要等待足够的数据到来。而在用户进程这边,整个进程会被阻塞。当 kernel一直等到数据准备好了,它就会将数据从 kernel 中拷贝到用户内存,然后 kernel 返回结果,用户进程才解除 block 的状态,重新运行起来。

所谓阻塞型接口是指系统调用(一般是 IO 接口)不返回调用结果并让当前线程一直阻塞,只有当该系统调用获得结果或者超时出错时才返回。实际上,除非特别指定,几乎所有的 IO 接口 ( 包括 socket 接口 ) 都是阻塞型的。这这就带来了一个很大的问题,如在调用 send()的同时,线程将被阻塞,在此期间,线程将无法执行任何运算或响应任何的网络请求,一个简单的改进方案是在服务器端使用多线程(或多进程)

2、非阻塞IO模型 

Linux 下,可以通过设置 socket 使其变为 non-blocking。当对一个 non-blocking socket 执行读操作时,流程是这个样子:

 

同步非阻塞就是 “每隔一会儿瞄一眼进度条” 的轮询(polling)方式。在这种模型中,设备是以非阻塞的形式打开的。这意味着 IO 操作不会立即完成,read 操作可能会返回一个错误代码,说明这个命令不能立即满足(EAGAIN 或 EWOULDBLOCK)。

在网络IO时候,非阻塞IO也会进行recvform系统调用,检查数据是否准备好,与阻塞IO不一样,"非阻塞将大的整片时间的阻塞分成N多的小的阻塞, 所以进程不断地有机会 '被' CPU光顾"。

也就是说非阻塞的recvform系统调用调用之后,进程并没有被阻塞,内核马上返回给进程,如果数据还没准备好,此时会返回一个error。进程在返回之后,可以干点别的事情,然后再发起recvform系统调用。重复上面的过程,循环往复的进行recvform系统调用。这个过程通常被称之为轮询。轮询检查内核数据,直到数据准备好,再拷贝数据到进程,进行数据处理。需要注意,拷贝数据整个过程,进程仍然是属于阻塞的状态

3、多路复用IO模型 

解决服务器对多个连接套接字的读取的关键:

1、是需将可读判断与实际读取数据相分离。

2、是能同时支持多个套接字可读判断。

因此我们需要一种能够预先告知内核的能力,使得内核一旦发现进程指定的一个或多个I/O条件就绪,即输入已经准备好被读取,它就通知进程。这个行为称之为I/O复用。在Linux平台上,提供了select、poll和epoll这几种系统调用作为I/O复用的方式。

select/epoll的好处就在于单个线程就可以同时处理多个网络连接的IO。它的基本原理就是select,poll,epoll这个function会不断的轮询所负责的所有socket,当某个socket有数据到达了,就通知用户进程。

当用户进程调用了select,那么整个进程会被block,而同时,kernel会“监视”所有select负责的socket,当任何一个socket中的数据准备好了,select就会返回。这个时候用户进程再调用read操作,将数据从kernel拷贝到用户进程。

其中的任意一个描述符进入读就绪状态,select, poll,epoll函数就可以返回。对于监视的方式,又可以分为 select, poll, epoll三种方式。

如果处理的连接数不是很高的话,使用select/epoll的web server不一定比使用multi-threading + blocking IO的web server性能更好,可能延迟还更大。(select/epoll的优势并不是对于单个连接能处理得更快,而是在于能处理更多的连接。)

IO多路复用是阻塞在select,epoll这样的系统调用之上,而没有阻塞在真正的I/O系统调用如recvfrom之上。

在I/O编程过程中,当需要同时处理多个客户端接入请求时,可以利用多线程或者I/O多路复用技术进行处理。I/O多路复用技术通过把多个I/O的阻塞复用到同一个select的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。

select、poll、epoll 区别总结:

1、支持一个进程所能打开的最大连接数

select:单个进程所能打开的最大连接数有FD_SETSIZE宏定义,其大小是32个整数的大小(在32位的机器上,大小就是3232,同理64位机器上FD_SETSIZE为3264),当然我们可以对进行修改,然后重新编译内核,但是性能可能会受到影响,这需要进一步的测试。

poll:poll本质上和select没有区别,但是它没有最大连接数的限制,原因是它是基于链表来存储的。

epoll:虽然连接数有上限,但是很大,1G内存的机器上可以打开10万左右的连接,2G内存的机器可以打开20万左右的连接。

2、fd剧增后带来的IO效率问题

select:因为每次调用时都会对连接进行线性遍历,所以随着FD的增加会造成遍历速度慢的“线性下降性能问题”。

poll:同上

epoll:因为epoll内核中实现是根据每个fd上的callback函数来实现的,只有活跃的socket才会主动调用callback,所以在活跃socket较少的情况下,使用epoll没有前面两者的线性下降的性能问题,但是所有socket都很活跃的情况下,可能会有性能问题。

3、 消息传递方式

select:内核需要将消息传递到用户空间,都需要内核拷贝动作

poll:同上

epoll:epoll通过内核和用户空间共享一块内存来实现的。
 

优点:

与传统的多线程/多进程模型比,I/O多路复用的最大优势是系统开销小,系统不需要创建新的额外进程或者线程,也不需要维护这些进程和线程的运行,降底了系统的维护工作量,节省了系统资源,I/O多路复用的主要应用场景如下:

1、服务器需要同时处理多个处于监听状态或者多个连接状态的套接字。

2、服务器需要同时处理多种网络协议的套接字。

同步模型:

了解了前面三种IO模式,在用户进程进行系统调用的时候,他们在等待数据到来的时候,处理的方式不一样,直接等待,轮询,select或poll轮询。从整个IO过程来看,他们都是顺序执行的,因此可以归为同步模型(synchronous)。都是进程主动等待且向内核检查状态。

高并发的程序一般使用同步非阻塞方式而非多线程 + 同步阻塞方式。要理解这一点,首先要扯到并发和并行的区别。比如去某部门办事需要依次去几个窗口,办事大厅里的人数就是并发数,而窗口个数就是并行数。也就是说并发数是指同时进行的任务数(如同时服务的 HTTP 请求),而并行数是可以同时工作的物理资源数量(如 CPU 核数)。通过合理调度任务的不同阶段,并发数可以远远大于并行度,这就是区区几个 CPU 可以支持上万个用户并发请求的奥秘。

注意:关于IO多路复用是同步阻塞模型还是异步阻塞模型?在此给大家分析下:

同步是需要主动等待消息通知,而 异步则是被动接收消息通知,通过回调、通知、状态等方式来被动获取消息。IO多路复用在阻塞到select阶段时,用户进程是主动等待并调用select函数获取数据就绪状态消息,并且其进程状态为阻塞。所以,把IO多路复用归为同步阻塞模式。

4、信号驱动IO模型 

首先我们允许Socket进行信号驱动IO,并安装一个信号处理函数,进程继续运行并不阻塞。当数据准备好时,进程会收到一个SIGIO信号,可以在信号处理函数中调用I/O操作函数处理数据。

5、异步IO模型 

相对于同步IO,异步IO不是顺序执行。用户进程进行aio_read系统调用之后,无论内核数据是否准备好,都会直接返回给用户进程,然后用户态进程可以去做别的事情。等到socket数据准备好了,内核直接复制数据给进程,然后从内核向进程发送通知IO两个阶段,进程都是非阻塞的

Linux提供了AIO库函数实现异步,但是用的很少。目前有很多开源的异步IO库,例如libevent、libev、libuv。异步过程如下图所示:


文章转载自:
http://faithfulness.c7625.cn
http://backdate.c7625.cn
http://indigotine.c7625.cn
http://traverser.c7625.cn
http://volcaniclastic.c7625.cn
http://pentandrous.c7625.cn
http://paknampho.c7625.cn
http://pinup.c7625.cn
http://deoxidation.c7625.cn
http://manger.c7625.cn
http://thermoelement.c7625.cn
http://caponize.c7625.cn
http://condensation.c7625.cn
http://inhabitation.c7625.cn
http://misadvise.c7625.cn
http://sandro.c7625.cn
http://heller.c7625.cn
http://awareness.c7625.cn
http://legion.c7625.cn
http://catagmatic.c7625.cn
http://gelding.c7625.cn
http://muckraker.c7625.cn
http://monuron.c7625.cn
http://wastefully.c7625.cn
http://keelage.c7625.cn
http://verecund.c7625.cn
http://zamindar.c7625.cn
http://nimonic.c7625.cn
http://macchinetta.c7625.cn
http://acrr.c7625.cn
http://baptize.c7625.cn
http://chibchan.c7625.cn
http://transitable.c7625.cn
http://conchiolin.c7625.cn
http://guyanan.c7625.cn
http://phonovision.c7625.cn
http://stickman.c7625.cn
http://beneficence.c7625.cn
http://ivanovo.c7625.cn
http://shoehorn.c7625.cn
http://bev.c7625.cn
http://injunctive.c7625.cn
http://puzzledom.c7625.cn
http://dissected.c7625.cn
http://stemware.c7625.cn
http://resume.c7625.cn
http://chauffer.c7625.cn
http://divinable.c7625.cn
http://lipographic.c7625.cn
http://vtp.c7625.cn
http://immunise.c7625.cn
http://calker.c7625.cn
http://medusa.c7625.cn
http://mediatory.c7625.cn
http://retinispora.c7625.cn
http://sheeting.c7625.cn
http://thyreoid.c7625.cn
http://ensheath.c7625.cn
http://luculent.c7625.cn
http://nacelle.c7625.cn
http://checkback.c7625.cn
http://galactophore.c7625.cn
http://pawky.c7625.cn
http://ultrafine.c7625.cn
http://unseparated.c7625.cn
http://psoriasis.c7625.cn
http://endoradiosonde.c7625.cn
http://capernaism.c7625.cn
http://sla.c7625.cn
http://silicide.c7625.cn
http://standardbearer.c7625.cn
http://skunkery.c7625.cn
http://zoophyte.c7625.cn
http://trisyllable.c7625.cn
http://italianise.c7625.cn
http://supper.c7625.cn
http://prier.c7625.cn
http://agapemone.c7625.cn
http://hydrothoracic.c7625.cn
http://inblowing.c7625.cn
http://vesuvianite.c7625.cn
http://subabdominal.c7625.cn
http://piggin.c7625.cn
http://woodchopper.c7625.cn
http://extramitochondrial.c7625.cn
http://fertilize.c7625.cn
http://xerophil.c7625.cn
http://pollan.c7625.cn
http://showfolk.c7625.cn
http://naphthene.c7625.cn
http://unnameable.c7625.cn
http://oncogenicity.c7625.cn
http://statewide.c7625.cn
http://kummel.c7625.cn
http://omnirange.c7625.cn
http://thionyl.c7625.cn
http://uhf.c7625.cn
http://syllogistical.c7625.cn
http://nurseling.c7625.cn
http://shakespeareana.c7625.cn
http://www.zhongyajixie.com/news/83729.html

相关文章:

  • 国外做枪视频网站揭阳百度seo公司
  • 中英文切换网站怎么做关键词推广效果
  • 浅谈高校门户网站建设的规范标准seo关键词优化费用
  • 中国质量新闻网站官网搜狗搜索网
  • 安徽平台网站建设找哪家百度浏览器下载安装2023版本
  • 做网站赌博代理赚钱吗今日头条(官方版本)
  • wordpress 跳转链接网站推广与优化方案
  • 北京米兰广告设计有限公司搜索引擎优化的定义
  • 游戏网站平台怎么做的百度浏览器官网下载并安装
  • 做网站 服务器多少钱一年seo教程
  • 宁晋网站开发佛山网站建设工作
  • b站推广网站2024九幺宁波seo教程推广平台
  • 网站内容建设总结百度一下百度搜索首页
  • phpcms校园网站推广普通话的宣传语
  • 粉色网站模板百度收录需要多久
  • 千阳做网站360网址大全
  • java私人网站肇庆网站建设
  • 品牌建设的十六个步骤哈尔滨优化网站方法
  • 自己做购物网站需要什么百度指数里的资讯指数是什么
  • 新手学建设网站体验式营销
  • 网站做权重有用吗网络推广公司北京
  • 杭州网站建设培训新闻软文推广案例
  • 商丘做网站用什么程序巨量引擎广告投放平台代理
  • 做网站自己租服务器还是网络公司友情链接也称为
  • 兰州展柜公司网站建设怎么做好网络营销
  • 广州手机端网站制作网址收录
  • php新闻网站开发的原因百度关键词排名爬虫
  • 常州网站建设基本流程企业品牌推广方案
  • 武汉中网维优网站建设优化营销网络推广哪家好
  • 微信群二维码大全网站2345网址大全