- 博客(9)
- 收藏
- 关注
原创 Linux: shell命令 eval (有图有代码有真相!!!)
一、eval 命令定义shell中的eval命令将会首先扫描命令行进行所有的替换,然后再执行命令。该命令使用于那些一次扫描无法实现其功能的变量。该命令对变量进行两次扫描。这些需要进行两次扫描的变量有时候被称为复杂变量。不过这些变量本身并不复杂。eval 命令也可以用于回显简单变量,不一定是复杂变量。功能说明:告知shell取出eval的参数,重新运算求出参数的内容。语
2017-06-15 18:24:49
1435
原创 Linux: shell 中命令代换 $() 和 ``(有图有代码有真相!!!)
一、命令代换(命令替换)由 ` ` 或 $() 括起来的也是一条命令,shell先执行该命令,再将结果立刻代换到当前命令行中。简单例子:DATE=`date`echo $DATE DATE=$(date) echo $DATE执行结果:二、优缺点:1、反引号的缺点1).它比较陈旧
2017-06-15 16:18:46
1057
原创 Linux: I/O多路转接之epoll(有图有代码有真相!!!)
一、基本概念epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/p
2017-06-14 00:10:35
671
原创 Linux: I/O多路转接之poll(有图有代码有真相!!!)
一、poll()函数解析不同与select使⽤用三个位图来表⽰示三个fdset的⽅方式,poll使⽤用⼀一个 pollfd的指针实现。pollfd结构包含了要监视的event和发⽣生的event, 不再使⽤用select“参数-值”传递的⽅方式。同时,pollfd并没有最⼤大数量限制(但是数量过⼤大后性能也是会下降)。 和select函数⼀一样,
2017-06-13 13:19:00
888
原创 Linux:I/O多路转接之select(有图有代码有真相!!!)
一、select引入一次 I/O 分为两个部分:1)等待数据就绪 2)进行数据转移1、select 原理:select的原理就是减少等待数据就绪的比重,巧妙的利用等待队列机制让用户进程适当在没有资源可读/写时睡眠,有资源可读/写时唤醒。下面我们看看select睡眠的详细过程。 select会循环遍历它所监测的fd_set(一组文件描述符(fd)的集合)内的所有文
2017-06-07 17:40:56
844
原创 Linux:dup/dup2 文件描述符重定向函数(有图有代码有真相!!!)
一、dup/dup2有时我们希望把标准输入重定向到一个文件,或者把标准输出重定向到一个网络连接。系统调用dup和dup2能够复制文件描述符。dup返回新的文件文件描述符(没有用的文件描述符最小的编号)。dup2可以让用户指定返回的文件描述符的值,如果需要,则首先接近newfd的值,他通常用来重新打开或者重定向一个文件描述符。1、dup函数dup函
2017-06-07 16:44:55
2383
原创 数据结构:神奇的B树实现解析(有图有代码有真相!!!)
一、B树引入二叉搜索树、平衡二叉树、红黑树都是动态查找树,典型的二叉搜索树结构,查找的时间复杂度和树的高度相关O(log2N)。1)数据杂乱无章-------线性查找--O(n)2)数据有序-------二分查找 ---O(log 2 n) 最差退化成单支树-----线性结构3)二叉搜索树、AVL树、红黑树 --------O(log2 n)数据一般保存在磁盘上,
2017-06-05 23:54:32
3068
2
原创 Linux:多进程、多线程服务器的实现解析(有图有代码有真相!!!)
一、问题引入阻塞型的网络编程接口几乎所有的程序员第一次接触到的网络编程都是从 listen()、send()、recv()等接口开始的。使用这些接口可以很方便的构建服务器 /客户机的模型。我们假设希望建立一个简单的服务器程序,实现向单个客户机提供类似于“一问一答”的内容服务。我们注意到,大部分的 socket接口都是阻塞型的。所谓阻塞型接口是指系统调用(一般
2017-06-03 11:38:23
1357
原创 Linux高性能服务器编程:进程池和线程池原理及应用(有图有代码有真相!!!)
一、问题引入在前面编写多进程、多线程服务器时通过动态创建子进程和子线程来实现并发服务器,这样做有以下缺点:1)动态创建进程、线程将会比较耗费时间,将导致较慢的客户响应。2)动态创建的子进程只为一个客户服务,将会产生大量的细微进程或线程,进程或线程之间的切换将耗费CPU大量的时间。3)动态创建的子进程是当前进程的完整映像,当前进程必须谨慎管理其分配的文件描述符和堆内存等系统资源,否则
2017-06-02 18:13:13
643
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅