1. 首页
  2. 综合百科
  3. 选择是什么意思(网络)

选择是什么意思(网络)

简介:关于选择是什么意思(网络)的相关疑问,相信很多朋友对此并不是非常清楚,为了帮助大家了解相关知识要点,小编为大家整理出如下讲解内容,希望下面的内容对大家有帮助!
如果有更好的建议或者想看更多关于综合百科技术大全及相关资讯,可以多多关注茶馆百科网。

你能完全理解这张图吗?

相关视频讲解

基于linuxepoll网络编程细节处理:「链接」

网路io底层epoll:「链接」

提升服务器底层性能,异步解决方案:「链接」

1.多路复用方式:多路复用方式是指当任何I/O有& quot事件& quot,这样我们的节目就变成了& quot多面手& quot,好像它可以同时处理多个I/O事件。

2.应用条件:

标准输入文件描述符已经准备好被读取。侦听套接字已准备就绪,新连接已成功建立。连接的套接字已准备好写入。如果I/O事件等待时间超过10秒,就会发生超时事件。3.中断的概念:

当cpu运行进程A时,进程B发起一个中断请求IRQ,中断处理程序处理该请求,挂起进程A,然后运行进程B.

中断的过程:将当前正在运行的进程的运行信息保存到进程的描述符中。根据进程描述符的内核状态堆栈指针切换到内核状态。根据IRQ在中断表中查找中断处理程序。运行中断处理程序。(看似是流程执行中断,但与流程无关)

4.硬中断的概念:

对于计算机硬件来说,一般是和当时的CPU请求异步的(没关系),比如来自网关的消息。

5.对软中断的理解:

当CPU正在执行一个代码段时,它遇到一个问题,中断它并从用户模式切换到内核模式。

6.每个中断都有相应的中断处理程序。

每个进程在用户模式和内核模式下都有一个堆栈。

8.为什么要有两种状态(内核状态和用户状态)?

内核态和用户态的权限是不同的。防止每个程序都分配过多资源。用户模式下的进程可以访问的资源受到严格控制,而内核模式下运行的进程可以& quot为所欲为& quot。

一个进程既可以运行在用户态,也可以运行在内核态,所以两者之间必然有一个在用户态和内核态之间切换的过程。

比如C库的接口malloc,申请动态内存,malloc的实现最终会调用brk()或者mmap()系统调用来分配内存。

9.从用户模式切换到内核模式有三种方式:

系统调用,上面已经解释过了,我在微信官方账号之前的文章里也解释过了。事实上,系统调用本身就是一个中断,但软件中断不同于硬中断。异常:如果当前进程运行在用户模式下,如果此时发生异常事件,就会触发切换。例如:缺页异常。外设中断:当外设完成用户的请求时,它会向CPU发送一个中断信号。10.插座的小演示

11 .套接字底层逻辑图

12.阻塞模式下的情况

(1)要传输的数据大于输出缓冲区的大小,需要单独传输,传输没有暂停。

(2)输出缓冲区TCP正在输出其他数据,需要TCP在写入前释放输出缓冲区。

(1)如果输入缓冲区没有数据,系统调用的方法挂起。

(2)缓冲区数据太多,一次只能读一部分,需要慢慢读,直到读完。

13.在非阻塞模式下

文章福利Linux后端开发网络底层原理知识学习提升点击正在跳转获取,完善技术栈,内容知识点包括Linux,Nginx,ZeroMQ,MySQL,Redis,线程池,MongoDB,ZK,Linux内核,CDN,P2P,epoll,Docker,TCP/IP,协程,DPDK等等。

(1)如果写入输出缓冲区的数据太多,会批量发送,但会马上告诉你已经发送了多少。

(2)如果空间为0,会立即告诉你缓冲区已满,最后一个程序会决定怎么做。(阻塞将被暂停,直到缓冲区被释放。)

14.进程从用户模式切换到内核模式:

1.从当前进程的描述符中提取内核堆栈的ss0和esp0信息。

2.使用ss0和esp0指向的内核堆栈保存当前进程的CS、EIP、Eflags、SS和ESP的信息。这个进程也完成了从用户栈到内核栈的切换过程,保存了Z挂起的程序的下一条指令.

3.将中断向量获取的中断处理程序的CS和EIP信息加载到相应的寄存器中,并开始执行中断处理程序。此时,切换内核模式的程序执行。

15.Linux中的一切都是一个文件fd。

16.select函数

#包括ys/select。提示select(intmaxfdp 1,fd_set*readset,fd_set*writeset,fd_set*exceptset,struct time val * time out);1)maxfdpl最大有效位。(因为fd_set是以位图来保存数据的Linux操作系统操作系统默认1024位位图最大有效位之后不需要检查)

2)fd_set*readset可读文件描述符集

p>3)fd_set*writeset  可写文件描述符集

4)fd_set*exceptset  异常文件描述符集

5)timeout  超时时间

Linuxselect函数的宏

#include<sys/select.h>intFD_ZERO(intfd,fd_set*fdset);//将描述符集全部置0intFD_CLR(intfd,fd_set*fdset);//intFD_SET(intfd,fd_set*fd_set);//将某个位置位intFD_ISSET(intfd,fd_set*fdset);//检查某个位是否被置位

select函数缺点:

1)固定文件描述符1024位的bitmap,请求过大则无法描述,有大小限制

2)fd_set不可重用,每次都有重新置位

3)有用户态到内核态切换的开销

4)每次函数返回都需要O(n)的时间进行遍历

17.poll函数

我们将select函数的bitmap结构的fd_set变为自己实现的pollfd


使用链表来进行文件描述,不存在大小限制问题。

18.epoll函数

19.同步调用、异步调用:

同步:B来向A拿取数据,B一直等到A正确交付数据。

异步:B来向A拿取数据,B见A还在准备则返回进行自己的事情。

20.阻塞、非阻塞

A向B拿数据,C也向A要数据,C要等待则是阻塞。

A向B拿数据,C也向A要数据,A同时服务BC则是非阻塞。

同步与异步

同步:同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。异步:异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠事件,回调等机制来通知调用者其返回结果。

同步和异步的区别最大在于异步的话调用者不需要等待处理结果,被调用者会通过回调等机制来通知调用者其返回结果。

阻塞和非阻塞

阻塞:阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他任务,只有当条件就绪才能继续。非阻塞:非阻塞就是发起一个请求,调用者不用一直等着结果返回,可以先去干其他事情。

21.网络通信例子

服务端

客户端

我们可以看到服务端有2个方法accept和read都在阻塞,这就是我们的BIO(同步阻塞I/O模式)

优化:我们可以使用多线程、线程池等来优化,关键是有很多不活跃的线程时,占用资源过多,上下文切换过多。

22.使用NIO优化通信例子(服务器端客户端无所谓)

23.windows的NIO是selectlinux的NIO底层是eqpoll。

Redis的NIO是epoll,只能在Linux环境运行,但是有win版本,是大神修改了redis代码。

本文主要介绍了关于选择是什么意思(网络)的相关养殖或种植技术,综合百科栏目还介绍了该行业生产经营方式及经营管理,关注综合百科发展动向,注重系统性、科学性、实用性和先进性,内容全面新颖、重点突出、通俗易懂,全面给您讲解综合百科技术怎么管理的要点,是您综合百科致富的点金石。
以上文章来自互联网,不代表本人立场,如需删除,请注明该网址:http://seotea.com/article/86087.html