文件描述符

第03章 Linux系统优化

痞子三分冷 提交于 2019-11-27 05:28:05
3.1Linux 系统的区别及实际查看 3.1.1 32 位与 64 位系统简单的介绍与对比 一.设计的初衷不同: 64 位操作系统的初衷是:满足机械设计和分析,三维动画等需要大量内存和浮点性能的客户需求,而 32 位只是位普通用户的设计。 二.要求的配置不同: 64 位只能在 64 位的电脑上进行, 32 位也可以安在 64 位的电脑上使用只是大打折扣。 三,运算速度不同: 64 位的 cpu 的数据宽度是 64 位,处理器一次就可以提取 64 位的数据,比 32 位提高了一倍,理论上性能会相应提升一倍。 四,寻址能力不同: 64 位的处理器的优势系统对内存的控制上。 怎么从 Linux 中查看 32 或 64 : 3.2 磁盘设备知识及 Linux 系统设备技术介绍 磁盘在使用之前要进行分区。 一块硬盘最多有四个分区:主分区,扩展分区和逻辑分区,主分区的位置可以用扩展分区代替,而且一块硬盘只有一个扩展分区,扩展分区内又可以划分为多个逻辑分区。 ( 2p+e/2P+1/1p+1e ) 必须在扩展分区上划分逻辑分区,然后格式化才能存数据,安装系统。 3.3 entos 6.5 x86_64 操作生产标准化基础优化 3.2.1 什么是字符集? 就是一套文字字符及其编码 字符集的默认路径: LANG: 负责字符集的变量 3.2.2 更改 SSH 服务远程登陆的配置 1.Window

【IO多路复用】

五迷三道 提交于 2019-11-27 02:51:01
原文: http://106.13.73.98/__/8/ 目录 一、IO模型介绍 二、阻塞IO(blocking IO) 三、非阻塞IO(non-blocking IO) 四、多路复用IO(IO multiplexing) 五、异步IO(Asynchronous I/O) 六、模型比较分析 七、关于select、poll、epoll 一、IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下: 同步、异步、阻塞、非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同。所以,为了更好的回答这个问题,我先限定一下本文的上下文。 本文讨论的背景是Linux环境下的network IO。本文最重要的参考文献是Richard Stevens的“UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking ”,6.2节“I/O Models ”

系统负载能力浅析

六月ゝ 毕业季﹏ 提交于 2019-11-26 20:05:36
系统负载能力浅析 —本文于2015.12.23号最新更新— 互联网时代,高并发是一个老生常谈的话提。无论对于一个web站点还是app应用,高峰时能承载的并发请求都是衡量一个系统性能的关键标志。像阿里双十一顶住了上亿的峰值请求、订单也确实体现了阿里的技术水平(当然有钱也是一个原因)。 那么,何为系统负载能力?怎么衡量?相关因素有哪些?又如何优化呢? 一. 衡量指标 用什么来衡量一个系统的负载能力呢?有一个概念叫做每秒请求数(Requests per second),指的是每秒能够成功处理请求的数目。比如说,你可以配置tomcat服务器的maxConnection为无限大,但是受限于服务器系统或者硬件限制,很多请求是不会在一定的时间内得到响应的,这并不作为一个成功的请求,其中成功得到响应的请求数即为每秒请求数,反应出系统的负载能力。 通常的,对于一个系统,增加并发用户数量时每秒请求数量也会增加。然而,我们最终会达到这样一个点,此时并发用户数量开始“压倒”服务器。如果继续增加并发用户数量,每秒请求数量开始下降,而反应时间则会增加。这个并发用户数量开始“压倒”服务器的临界点非常重要,此时的并发用户数量可以认为是当前系统的最大负载能力。 二. 相关因素 一般的,和系统并发访问量相关的几个因素如下: 带宽 硬件配置 系统配置 应用服务器配置 程序逻辑 系统架构 其中

【python】IO多路复用(select、poll、epoll)介绍及select、epoll的实现

╄→尐↘猪︶ㄣ 提交于 2019-11-26 19:59:21
IO多路复用(select、poll、epoll)介绍及select、epoll的实现 IO多路复用中包括 select、pool、epoll,这些都属于同步,还不属于异步 一、IO多路复用介绍 1、select select最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组,当select()返回后,该数组中就绪的文件描述符便会被内核修改标志位,使得进程可以获得这些文件描述符从而进行后续的读写操作。   select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,事实上从现在看来,这也是它所剩不多的优点之一。   select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在Linux上一般为1024,不过可以通过修改宏定义甚至重新编译内核的方式提升这一限制。   另外,select()所维护的存储大量文件描述符的数据结构,随着文件描述符数量的增大,其复制的开销也线性增长。同时,由于网络响应时间的延迟使得大量TCP连接处于非活跃状态,但调用select()会对所有socket进行一次线性扫描,所以这也浪费了一定的开销。 2、poll poll在1986年诞生于System V Release 3,它和select在本质上没有多大差别,但是poll没有最大文件描述符数量的限制。  

第七章 文件与I/O(4)

余生颓废 提交于 2019-11-26 17:39:16
文件共享 打开文件内核数据结构 一个进程两次打开同一个文件 一个进程能打开1024个文件描述符,没打开一个文件,内核会生成一个文件表,文件表中的v节点指针指向v节点表,v节点部分信息就是stat函数返回的信息,i节点信息,当我们打开一个文件的时候,会将文件系统中i节点信息拷贝到v节点信息对应的i节点信息中(i节点号,文件存在那一块中,) #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #include <string.h> #include <dirent.h> #include <pwd.h> #include <time.h> #define ERR_EXIT(m) \ do \ { \ perror(m); \ exit(EXIT_FAILURE); \ }while(0) int main(int argc, char* argv[]) { int fd1,fd2; char readbuf1[1024] = {0}; char readbuf2[1024] = {0}; //open会打开文件表,文件表会记录当前文件的状态标志

三种io复用的总结

邮差的信 提交于 2019-11-26 17:34:41
io复用的作用是能使程序同时监听多个文件描述符; 一般在下面几种情况下要用到io复用: 客户端程序要同时处理多个socket。 客户端程序要同时处理用户输人和网络连接。 TCP服务器要同时处理监听socket和连接socket。 服务器要同时处理TCP请求和UDP请求。 服务器要同时监听多个端口,或者处理多种服务。 Linux下实现I/O复用的系统调用主要有 select、poll 和epoll 以下依次介绍; select系统调用的原型如下: include <sys/select.h> int select( int nfds, fd_ set* readfds, fd_ set* writefds, fd_ set* exceptfds,struct timeval* timeout ) ; nfds 参数指定被监听的文件描述符的总数。它通常被设置为select 监听的所有文件描述符中的最大值加1,因为文件描述符是从0开始计数的。 readfds、 writefds 和exceptfds参数分别指向可读、可写和异常等事件对应的文件描述符集合。应用程序调用select函数时,通过这3个参数传入自已感兴趣的文件描述符。 timeout参数用来设置select函数的超时时间。 poll的函数原型如下: #include <poll.h> int poll( struct

【IO多路复用】 -- 2019-08-09 10:54:02

ε祈祈猫儿з 提交于 2019-11-26 16:09:45
原文: http://106.13.73.98/__/8/ 目录 一、IO模型介绍 二、阻塞IO(blocking IO) 三、非阻塞IO(non-blocking IO) 四、多路复用IO(IO multiplexing) 五、异步IO(Asynchronous I/O) 六、模型比较分析 七、关于select、poll、epoll 一、IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下: 同步、异步、阻塞、非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不相同。所以,为了更好的回答这个问题,我先限定一下本文的上下文。 本文讨论的背景是Linux环境下的network IO。本文最重要的参考文献是Richard Stevens的“UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking ”,6.2节“I/O Models ”

Linux虚拟地址空间

左心房为你撑大大i 提交于 2019-11-26 16:09:15
首先,对于32位机器而言,每个程序运行起来,os会给程序提供4G的可操作空间,但并非就是硬盘少了4G,而是程序可以操作4G,具体使用多少视具体使用情况而言,其他未用到的仍然空闲放在那里! 下面看一下4G虚拟地址的具体分配情况: 1、指向NULL的指针:此时该指针放在受保护地址段(0~4K),指针无法正规操作,所以要想使用指针,指针必须具有明确的指向。 2、ELF段(Executable and Linkable Format):是Linux下用于 二进制文件 、 可执行文件 、 目标代码 、共享库和核心转储格式文件。 ELF段包括: .bss、.data、.text三个小区段 .text: 代码段,用于存放代码,代码在此段中的存储采用绝对位置的存放方式,因此不需要知道偏移量 3、共享库:用于存放C标准库函数和Linux系统IO函数,函数在此段中的存放按照相对位置存放,因此每次需要根据偏移量去对应位置取出函数,因此在生成动态库时,必须与位置无关。 二、1G的Linux内核空间 在Linux内核中,有一个很重要的概念就是PCB(进程控制块),在PCB中会有一个 文件描述符,文件描述符 其实就是一个整形数组,表示空间为0~1023,默认开启一个程序后,默认打开的有三个描述符:stdin、stdout、stderr,程序每打开一个文件就会占用一个文件描述符

深入理解Android消息机制

时光毁灭记忆、已成空白 提交于 2019-11-26 15:53:23
在日常的开发中,Android 的消息机制作为系统运行的根本机制之一,显得十分的重要。 从 Handler 发送消息开始 查看源码,Handler的post、send方法最终都会走到 代码 public final boolean sendMessageDelayed(Message msg, long delayMillis) { if (delayMillis < 0) { delayMillis = 0; } return sendMessageAtTime(msg, SystemClock.uptimeMillis() + delayMillis); } sendMessageDelayed 会走到 代码 private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) { msg.target = this; if (mAsynchronous) { msg.setAsynchronous(true); } return queue.enqueueMessage(msg, uptimeMillis); } 这里可以设置 Message 为异步消息 查看 queue 的 enqueueMessage 方法, 我们剥离出核心代码: 代码 if (p == null ||

系统资源限制 / 文件描述符配置

泪湿孤枕 提交于 2019-11-26 14:26:35
系统资源限制 阐述: linux 系统对各个资源的使用都是有限制的,如果要更改默认阈值,可通过命令(ulimit)临时生效或者配置文件(/etc/security/limits.conf和/etc/security/limits.d/目录下文件)永久生效两种方式。 limits.conf 配置说明(重启生效) 注意 限制资源使用的配置文件是 /etc/security/limits.conf,和/etc/security/limits.d/目录,/etc/security/limits.d/里面配置会覆盖/etc/security/limits.conf的配置 限制的资源类型: 所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、 单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存。同时,它支持硬资源和软资源的限制。 配置文件格式 #<domain> <type> <item> <value> #* soft core 0 #root hard core 100000 #* hard rss 10000 #@student hard nproc 20 #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp