Linux 高性能服务器
文章平均质量分 88
swartz_lubel
这个作者很懒,什么都没留下…
展开
-
socket 选项 详细说明
下面的两个函数主要是用于设置socket文件描述符属性的方法getsockopt 和setsockopt这两个函数成功时返回0,失败时返回-1并设置errno ,可以使用 strerror(errno) 将错误码转换为对应的提示消息。例子如下/*查询和设置接收缓冲区*/int recvbuf = 0;int len = sizeof( recvbuf );getsockopt( sock, ...原创 2018-03-15 21:32:58 · 2017 阅读 · 0 评论 -
linux 高级IO函数之sendfile splice tee
sendfile函数在两个文件描述符之间传递数据(完全在内核中操作),从而避免内核缓冲区和用户缓冲区之间的数据拷贝,效率很高,这被称为零拷贝。函数的定义如下:#include<sys/sendfile.h>ssize_t sendfile(int out_fd,int in_fd , off_t* offset ,size_t count);in_fd参数是待读出内容的文件描述符,...原创 2018-03-17 11:17:50 · 963 阅读 · 0 评论 -
linux 高级IO函数之fcntl mmap/munmap
fcntl函数提供了对文件描述符的各种控制操作。另外一个常见的控制文件描述符属性和行为的系统调用是ioctl,而且ioctl比fcntl能够执行更多的控制。但是对于控制文件描述符常用的属性和行为,fcntl函数是由POSIX规范指定的首选方法,函数定义如下:#include<fcntl.h>int fcntl(int fd,int cmd,...)fd参数是被操作的文件描述符,cmd...原创 2018-03-17 11:36:00 · 358 阅读 · 0 评论 -
linux pthread
原创 2018-03-17 20:58:53 · 155 阅读 · 0 评论 -
linux pthread 信号量 互斥量
#include <pthread.h>#include <unistd.h>#include <stdio.h>int a = 0;int b = 0;pthread_mutex_t mutex_a;pthread_mutex_t mutex_b;void* another( void* arg ){ pthread_mutex_l...原创 2018-03-17 21:47:56 · 685 阅读 · 0 评论 -
Linux 条件变量
线程同步机制包装类#ifndef LOCKER_H#define LOCKER_H#include <exception>#include <pthread.h>#include <semaphore.h>class sem{public: sem() { if( sem_init( &m_sem, 0,...原创 2018-03-17 22:06:46 · 203 阅读 · 0 评论 -
Linux 信号
#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <assert.h>#include <stdio.h>#include <signal.h>#incl原创 2018-03-18 12:07:12 · 201 阅读 · 0 评论 -
Linux 调整内核参数
原创 2018-03-18 12:15:42 · 444 阅读 · 0 评论 -
linux 高级IO函数之dup dup2
#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <assert.h>#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include原创 2018-03-16 23:30:08 · 225 阅读 · 0 评论 -
IO模型
socket在创建的时候默认是阻塞的。我们可以给socket系统调用的第二个参数船都SOCK_NONBLOCK标志,或者通过fcntl系统调用的F_SETFL命令,将其设置为非阻塞的。阻塞和非阻塞的概念能应用于所有的文件描述符,而不仅仅是socket。我们称阻塞的文件描述符称为阻塞IO,成非阻塞的文件描述符为非阻塞IO。针对阻塞IO执行的系统调用可能因为无法立即完成而被操作系统挂起,直到等待的事件...原创 2018-03-16 23:22:56 · 127 阅读 · 0 评论 -
linux 高级IO函数之pipe socketpair
主要讨论一些和网络相关的函数,大值分为三类:1.用于创建文件描述符的函数,包括pipe dup/dup2函数2.用于读写数据的函数,包括readv/wrietv sendfile mmap/munmap splice和tee函数3.用于控制IO行为和属性的函数,包括fcntl函数pipe函数:用于创建一个管道,以实现进程间通信。定义如下:#include<unistd.h>int ...原创 2018-03-16 22:53:58 · 573 阅读 · 0 评论 -
epoll 系列系统调用
epoll是linux 特有的I/O复用函数,它在实现和使用上和select ,poll有很大的差异!首先epoll使用一组函数来完成任务,而不是单个函数。其实epoll吧用户关心的文件描述符的事件放在内核的一个事件表里,而无须像select 和poll那样每次调用都要重复传入文件描述符或事件集。但epoll需要使用一个额外的文件描述符,来唯一标识内核中的一个事件表,这文件描述符使用如下的epo...原创 2018-03-15 23:13:08 · 1140 阅读 · 0 评论 -
I/O复用函数的比较
select poll 和 epoll 三组I/O复用系统调用都能够同时监听多个文件描述符。它们将等到由timeout参数指定的超时时间,直到一个或者多个文件描述符上有时间发生时返回,返回值就是就绪的文件描述符的数量。返回0表示没有事件发生。现在我们从事件集 最大支持文件描述符数和具体实现等四个方面进一步比较它们的异同,以明确在实际应用中应该选择哪个。这三组函数都是通过某种结构体变量来告诉内核监听...原创 2018-03-15 23:52:45 · 174 阅读 · 0 评论 -
Socket选项之SO_RCVTIMEO 和SO_SNDTIMEO
这两个选项分别用来设置socket接收数据和发送数据的超时时间,因此仅对于数据接收和发送相关的socket专用系统调用有效,,这些系统调用包括 send,sendmsg,recv,recvmsg ,accept 和connect.在程序中,我们可以根据系统调用的返回值和errno来判断超时时间是否已到,进而觉得是否开始定时任务.#include <sys/types.h>#inclu...原创 2018-03-16 09:09:47 · 3823 阅读 · 0 评论 -
Linux 系统检测工具
讨论一些最常用的工具:tcpdump nc strace lsof netstat vmstat ifstat 和mpstat !1. tcpdump tcpdump表达式的操作数分为三种: 类型 方向和协议 2.lsoflsof是一个列出当前系统打开的文件描述符的工具.通过它我们可以了解感兴趣的进程打开了哪些文件描述符或者我们感兴趣的文件描述符被哪些进程打开了.lsof常用的选项包括:3.nc它...原创 2018-03-16 09:26:12 · 726 阅读 · 0 评论 -
Reactor模式和Proactor模式
同步IO模型通常用户实现Reactor模式,异步IO模型用于实现Proactor模式,不过也可以使用同步IO去模式Proactor模式.1.Reactor模式Reactor是这样的一种模式,它要求主线程(IO处理单元)只负责监听文件描述符上是否有事件发生,有的话就立即将该事件通知工作线程(逻辑单元).除此之外,主线程不做其他任何实质性的工作.读写数据 ,接收新的连接,以及处理客户请求均在工作线程中...原创 2018-03-16 14:26:32 · 366 阅读 · 1 评论 -
提升服务器性能的建议
性能对于服务器来说是至关重要的,毕竟每个活动都期望起请求能很快的得到响应.影响服务器性能的首要因素就是系统的硬件资源.比如CPU的个数 速度 内存的大小等.不过由于硬件技术的飞速发展,现代服务器都不缺反硬件资源,因此我们需要考虑的主要问题是如何从"软环境"来提升服务器的性能.服务器的"软环境",一方面是指系统的软件资源,比如操作系统允许用户打开的最大文件描述符数量;另一方面指的就是服务器程序本身,...原创 2018-03-16 15:03:14 · 2103 阅读 · 0 评论 -
高效的半同步/半异步模式的实现
先介绍一下半同步/半异步模式:首先半同步/半异步模式中的同步和异步和前面的IO模型中的同步和异步是完全不用的概念。在IO模型中,同步和异步区分的是内核向应用程序通知的是何种IO事件(是就绪事件还是完成事件),以及该由谁来完成IO读写(是应用程序还是内核)。在并发模式中,同步指的是程序完全按照代码序列的顺序执行,异步指的是程序的执行需要由系统事件来驱动。常见的系统事件包括中断 信号等。比如8-8a描...原创 2018-03-16 21:19:57 · 1904 阅读 · 0 评论 -
Linux errno详解
Linux中系统调用的错误都存储于 errno中,errno由操作系统维护,存储就近发生的错误,即下一次的错误码会覆盖掉上一次的错误。errno: 0 Successerrno: 1 Operation not permittederrno: 2 No such file or directoryerrno: 3 No such pro...原创 2018-03-16 22:11:37 · 428 阅读 · 0 评论 -
libco协程库上下文切换原理详解
缘起libco 协程库在单个线程中实现了多个协程的创建和切换。按照我们通常的编程思路,单个线程中的程序执行流程通常是顺序的,调用函数同样也是 “调用——返回”,每次都是从函数的入口处开始执行。而libco 中的协程却实现了函数执行到一半时,切出此协程,之后可以回到函数切出的位置继续执行,即函数的执行可以被“拦腰斩断”,这种在函数任意位置 “切出——恢复” 的功能是如何实现的呢? 本文从libco ...转载 2018-05-12 17:31:25 · 270 阅读 · 0 评论