Linux I/O模型详解 Linux

热文Linux I/O模型详解

【导读】先抛出一个问题,基于此问题引出文章的主题:1999年DanKegel在其个人站点提出了 C10K问题,首字母C是Client的缩写,C10K即单机同时处理1万个连接的问题。C10K表示处理10000个并发连接,注意这里的并发连接和每秒请求数不同,虽然它们是相似的,每秒处理许多请求需要很高的吞吐量(快速处理它们),但是更大数量的并发连接需要高效的连接调度,即I/O模型的问题。道听途说:早期QQ也面临C10K问题,所以他们使用UDP绕开了这个问题。UDP协议是无连接方式的协议,它的效率高,速度快,占资源少,但是其传输机制为不可靠传送,必须依靠辅助的算法来完成传输控制。BIOBIO(Blocking...

openstack虚拟机实例创建并实现与外部网络通信流程 Linux

热文openstack虚拟机实例创建并实现与外部网络通信流程

【导读】1.准备镜像文件镜像是创建虚拟机实例的基础,这里先准备两个镜像文件:1.1下载cirros镜像文件从cirros官网下载最新的镜像文件http://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img1.2下载fedora镜像文件fedora项目镜像文件下载地址为:https://fedoraproject.org/cloud/download1.3上传cirros镜像以云管理员admin身份登录OpenStack:左侧管理员#8211;gt;计算#8211;gt;镜像#8211;gt;创建镜像输入镜像名称#8211;gt;浏...

域名解析API介绍 Linux

热文域名解析API介绍

【导读】为了便于记忆,有时候我们需要我们的程序可以使用域名和端口号去连接服务,这种情况下,我们需要使用socketAPI gethostbyname 函数先把域名转换成ip地址,再使用connect函数连接。在Linux系统上, gethostbyname函数的签名如下:#includelt;netdb.h>structhostent*gethostbyname(constchar*name);域名转换成ip时,转换结果存在一个 hostent 结构体中。转换成功后的ip地址存放在 hostent 最后一个字段中,hostent 结构体类型定义如下:structhostent{char*h_na...

Ubuntu开机卡在A start job is runing解决方法 Linux

热文Ubuntu开机卡在A start job is runing解决方法

【导读】安装ubuntu20.04LTS系统后,开机卡在“AstartjobisrunningforwaitfornetworktobeConfigured”等待连接两分多钟。(启动作业正在运行,等待配置网络)解决办法:1、进入该目录下,修改配置文件。weijishu@ubuntu:~$ cd /etc/systemd/system/network-online.target.wants/2、在[Service]下添加TimeoutStartSec=2sec,(设置超时时间为2秒)如下:weijishu@ubuntu:/etc/systemd/system/network-online.target....

readv和writev函数详解 Linux

热文readv和writev函数详解

【导读】在实际开发种,高性能服务有一条尽量减少系统调用的原则。对于一个文件描述符(filedescriptor,fd,例如文件指针、套接字类型)的read或者write,都是系统调用。有时候我们会遇到通过一个文件描述对应的文件或套接字上将数据读到多个缓冲区中去,或者将多个缓冲区中的数据同时写入一个文件描述符对应的文件或者套接字中。当然,你可以通过多次调用read或者write,挨个操作每个缓冲区。Linux系统提供了一组readv和writev系列函数来完成上述工作。这个系列函数的签名如下:#includelt;sys/uio.h>ssize_treadv(intfd,conststructio...

Linux poll详解 Linux

热文Linux poll详解

【导读】poll 函数用于检测一组文件描述符(File Descriptor, fd)上的可读可写和出错事件,其函数签名如下:#includelt;poll.h>intpoll(structpollfd*fds,nfds_tnfds,inttimeout);参数解释:fds:指向一个结构体数组的首个元素的指针,每个数组元素都是一个structpollfd结构,用于指定检测某个给定的fd的条件;nfds:参数 fds 结构体数组的长度,nfds_t 本质上是 unsignedlongint,其定义如下:typedef unsigned long int nfds_t;timeout:表示poll函...

Linux epoll详解 Linux

热文Linux epoll详解

【导读】基本用法综合 select 和 poll 的一些优缺点,Linux从内核2.6版本开始引入了更高效的epoll模型,本文我们来详细介绍epoll模型。要想使用epoll模型,必须先需要创建一个epollfd,这需要使用 epoll_create 函数去创建:#includelt;sys/epoll.h>intepoll_create(intsize);参数 size 从Linux2.6.8以后就不再使用,但是必须设置一个大于0的值。epoll_create 函数调用成功返回一个非负值的epollfd,调用失败返回-1。有了epollfd之后,我们需要将我们需要检测事件的其他fd绑定到这个...

Linux内存碎片整理 Linux

热文Linux内存碎片整理

【导读】我们知道物理内存是以页为单位进行管理的,每个内存页大小默认是4K(大页除外)。申请物理内存时,一般都是按顺序分配的,但释放内存的行为是随机的。随着系统运行时间变长后,将会出现以下情况:如上图所示,当用户需要申请地址连续的3个内存页时,虽然系统中空闲的内存页数量足够,但由于空闲的内存页相对分散,从而导致分配失败。这些地址不连续的内存页被称为:内存碎片。要解决这个问题也比较简单,只需要把空闲的内存块移动到一起即可。如下图所示:网络上有句很有名的话:理想很美好,现实很骨感。内存整理也是这样,看起来很简单,但实现起来就不那么简单了。因为在内存整理后,需要修正进程的虚拟内存与物理内存之间的映射关系。如下...

Linux环境变量详解 Linux

热文Linux环境变量详解

【导读】一、什么是环境变量环境变量,通常称为 env ,是对 Linux 操作系统中程序和进程的行为具有重要影响的动态值。这些变量作为一种手段,向软件传达基本信息,并塑造它们如何与环境交互。每个 Linux 进程都与一组环境变量相关联,这些环境变量指导 Linux 进程的行为和与其他进程的交互。Linux 环境变量是定义系统 shell 会话和程序行为的键值对。它们使系统管理员可以轻松地在应用程序和用户之间共享和区分配置。管理员可以使用 Linux 命令修改它们,以根据托管应用程序的需要调整服务器设置。根据任务的不同,还可以设置临时或永久环境变量。二、变量的分类变量分为环境变量和shell变量环境变量...

Linux SIGPIPE信号 Linux

热文Linux SIGPIPE信号

【导读】在TCP通信双方中,为了描述方便,以下将通信双方用A和B代替。当A“关闭”连接时,若B继续给A发数据,根据TCP协议的规定,B会收到A的一个RST报文响应,如B继续再往这个服务器发送数据,系统会产生一个 SIGPIPE 信号给该B进程,告诉该进程这个连接已经断开了,不要再写了。系统对 SIGPIPE 信号的默认处理行为是让B进程退出。操作系统对 SIGPIPE 信号的这种默认处理行为非常不友好,让我们来分析一下。上图是TCP通信四次挥手的示意图,TCP通信是全双工的信道,可以看作两条单工信道,TCP连接两端的两个端点各负责一条。当对端“关闭”时,虽然本意是关闭整个两条信道,但本端只是收到FIN...

最新资讯

热门资讯