poll

PHP-php-fpm配置优化

本小妞迷上赌 提交于 2020-01-31 00:16:19
前言:   1.少安装PHP模块, 费内存   2.调高linux内核打开文件数量,可以使用这些命令(必须是root帐号)(我是修改/etc/rc.local,加入ulimit -SHn 51200的) echo `ulimit -HSn 65536` >> /etc/profile echo `ulimit -HSn 65536` >> /etc/rc.local source /etc/profile   如果`ulimit -n`数量依旧不多(即上面配置没生效)的话, 可以在 /etc/security/limits.conf 文件最后加上 * soft nofile 51200 * hard nofile 51200 1. 与Nginx使用Unix域Socket通信(Nginx和php-fpm在同一台服务器)    Unix域Socket因为不走网络,的确可以提高Nginx和php-fpm通信的性能,但在高并发时会不稳定 。   Nginx会频繁报错:connect() to unix:/dev/shm/php-fcgi.sock failed (11: Resource temporarily unavailable) while connecting to upstream   可以通过下面两种方式提高稳定性:   1)调高nginx和php-fpm中的 backlog

Linux Kernel2.6.9内核源码分析--poll

旧城冷巷雨未停 提交于 2020-01-28 15:06:22
Linux Kernel2.6.9内核源码分析–poll long sys_poll(struct pollfd __user * ufds, unsigned int nfds, long timeout) poll对应的系统调用为sys_poll,以下是参数说明: struct pollfd __user * ufds :为struct pollfd的数组,里面有文件描述符,event 和revent,其中event为要监听的event类型,revent为监听的结果 unsigned int nfds:为struct pollfd的数组中的元素个数 long timeout:超时时间 asmlinkage long sys_poll ( struct pollfd __user * ufds , unsigned int nfds , long timeout ) { . . . . . . . . . . . . . poll_initwait ( & table ) ; . . . . . . . . . . while ( i != 0 ) { struct poll_list * pp ; pp = kmalloc ( sizeof ( struct poll_list ) + sizeof ( struct pollfd ) * ( i > POLLFD_PER

高并发多路IO之select,poll和epoll模型区别与代码实现

≡放荡痞女 提交于 2020-01-28 07:53:34
多路IO之select 优点:单进程下支持高并发,可以跨平台 缺点:多次从内核到应用,应用到内核的数组拷贝;    每次内核都会重置填写的数据    最大支持1024客户端,原因在于fd_set定义使用了FD_SETSIZE,大小为1024; 以下是select模型server代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/socket.h> #include <sys/wait.h> #include <netinet/in.h> #include <errno.h> #include <fcntl.h> #include <sys/select.h> #include <ctype.h> int main(){ int lfd = socket(AF_INET,SOCK_STREAM,0); struct sockaddr_in serv; bzero(&serv,sizeof(serv)); serv.sin_port = htons(8888); serv.sin_family = AF_INET; serv.sin_addr.s_addr

IO多路复用之epoll总结

最后都变了- 提交于 2020-01-27 03:05:52
除了自己实现之外,还有个c语言写的基于事件的开源网络库:libevent http://www.cnblogs.com/Anker/p/3265058.html 最简单的select示例: #include <stdio.h> #include <sys/time.h> #include <sys/types.h> #include <unistd.h> #define STDIN 0 // file descriptor for standard input int main(void) { struct timeval tv; fd_set readfds; tv.tv_sec = 2; tv.tv_usec = 500000; FD_ZERO(&readfds); FD_SET(STDIN, &readfds); // don't care about writefds and exceptfds: select(STDIN+1, &readfds, NULL, NULL, &tv); if (FD_ISSET(STDIN, &readfds)) printf("A key was pressed!\n"); else printf("Timed out.\n"); return 0; } select、poll、epoll之间的区别总结[整理] select,poll

linux poll机制使用(一)

廉价感情. 提交于 2020-01-26 14:22:47
一、poll机制的作用 1.poll机制的作用 在前面的使用中断的的方式来读取按键值( linux 中断管理(四) )。使用这种方式读取按键,如果按键没有按下的时候,应用程序会一直处于睡眠的状态。如果想要即使按键没有按下,在一定的时间后也能返回,要实现这种功能,可以使用 poll机制 。( select IO复用 和 epoll 也可以实现这种功能,这里只写poll机制) 二、poll机制的应用编程 1.应用层函数接口 1).API: int poll(struct pollfd *fds, nfds_t nfds, int timeout); 2).Paramet: fds nfds timeout 参数类型: struct pollfd { int fd; /* 文件描述符 / short events; / 等待的发生事件类型 / short revents; / 实际返回的事件类型 */ }; 参数描述: fds是一个结构体指针,也就是poll函数可以同时等待一个或者多个文件描述符的事件 参数类型: nfds_t,其实就是int型 参数描述: 用来说明poll同时监听fds的个数 参数类型: int 参数描述: 等于-1:永久等待 等于0:立即返回 大于0:等待超时时间,以毫秒为单位 3).Return: 返回值 描述 <0 错误返回 =0 超时返回 >0 返回结构体中

Kafka消费者APi

时光怂恿深爱的人放手 提交于 2020-01-25 02:04:52
Kafka客户端从集群中消费消息,并透明地处理kafka集群中出现故障服务器,透明地调节适应集群中变化的数据分区。也和服务器交互,平衡均衡消费者。 public class KafkaConsumer<K,V> extends Object implements Consumer<K,V> 消费者TCP长连接到broker来拉取消息。故障导致的消费者关闭失败,将会泄露这些连接,消费者不是线程安全的,可以查看更多关于 Multi-threaded(多线程) 处理的细节。 跨版本兼容性 该客户端可以与0.10.0或更新版本的broker集群进行通信。较早的版本可能不支持某些功能。例如, 0.10.0 broker不支持 offsetsForTimes ,因为此功能是在版本 0.10.1 中添加的。 如果你调用broker版本不可用的API时,将报 UnsupportedVersionException 异常。 偏移量和消费者的位置 kafka为分区中的每条消息保存一个 偏移量(offset) ,这个 偏移量 是该分区中一条消息的唯一标示符。也表示消费者在分区的位置。例如,一个位置是5的消费者(说明已经消费了0到4的消息),下一个接收消息的偏移量为5的消息。实际上有两个与消费者相关的“位置”概念: 消费者的位置给出了下一条记录的偏移量。它比消费者在该分区中看到的最大偏移量要大一个。

按层次遍历树结构

为君一笑 提交于 2020-01-22 01:12:01
解法1 package tree . leveltraversal ; import tree . Node ; import tree . myavl . BalanceTree ; import java . util . LinkedList ; import java . util . Queue ; /** * Created by lijie35 on 2020-01-21 10:45 AM . */ public class LevelTraversal2 { public static void main ( String [ ] args ) { BalanceTree bl = new BalanceTree ( ) ; bl . put ( 10 ) ; bl . put ( 5 ) ; bl . put ( 15 ) ; bl . put ( 4 ) ; bl . put ( 7 ) ; bl . put ( 11 ) ; bl . put ( 16 ) ; Queue queue1 = new LinkedList ( ) ; queue1 . add ( bl . root ) ; LevelTraversal2 . cycle ( queue1 ) ; System . out . println ( queue1 ) ; } public

Redis源码剖析和注释(十九)--- Redis 事件处理实现

自古美人都是妖i 提交于 2020-01-20 00:22:23
Redis 事件处理实现 Redis事件介绍 Redis服务器是一个事件驱动程序。下面先来简单介绍什么是事件驱动。 所谓事件驱动,就是当你输入一条命令并且按下回车,然后消息被组装成Redis协议的格式发送给Redis服务器,这就会产生一个事件,Redis服务器会接收该命令,处理该命令和发送回复,而当你没有与服务器进行交互时,那么服务器就会处于阻塞等待状态,会让出CPU从而进入睡眠状态,当事件触发时,就会被操作系统唤醒。事件驱动使CPU更高效的利用。 事件驱动是一种概括和抽象,也可以称为I/O多路复用(I/O multiplexing),它的实现方式各个系统都不同,一会会说到Redis的方式。 在redis服务器中,处理了两类事件: 文件事件(file event):Redis服务器通过套接字于客户端(或其他Redis服务器)进行连接,而文件事件就是服务器对套接字操作的抽象。 时间事件(time event):Redis服务器的一些操作需要在给定的事件点执行,而时间事件就是服务器对这类定时操作的抽象。 2. 事件的抽象 Redis将这两个事件分别抽象成一个数据结构来管理。redis 所有源码注释 2.1 文件事件结构 /* File event structure */ typedef struct aeFileEvent { // 文件时间类型:AE_NONE,AE

Android系统消息处理机制

会有一股神秘感。 提交于 2020-01-19 12:09:55
Android系统消息处理机制 前言 在Android应用开发中,主线程一般都是UI操作,子线程去完成一些耗时操作。主线程会一直等待系统或者用户的响应,从而完成对UI的渲染和显示。在学些之前,先了解两个linux的知识点: 管道(pipe):管道是一种IPC机制,作用于有血缘关系的进程之间,完成数据传递,调用pipe系统函数可创建一个管道。其本质是一个虚拟文件(实际为内核缓冲区),采用半双工通信方式,数据只能在一个方向流动。 int pipe ( int pipefd [ 2 ] ) ; //成功:0;失败:-1,设置errno 函数调用成功后返回r/w两个文件描述符,无需open,但要显示的close,fd[0] --> r,fd[1] --> w,向管道文件读写数据实际上是在读写内核缓冲区。下面是完成进程间通信的调用逻辑: 父进程调用pipe函数创建管道,得到两个文件描述符fd[0]、fd[1]指向管道的读写端。 父进程调用fork创建子进程,那么子进程也有两个文件描述符指向同一管道。 3)父进程关闭管道读端,子进程关闭管道写端。父进程可以向管道中写入数据,子进程向管道中的数据读出,由于管道是利用环形缓冲区实现得,数据从写端流入管道,从读端流出,这样就实现了进程间通信。 epoll 机制:epoll是linux内核的一种可拓展的IO事件处理机制