接上文我们查看了bind和listen流程,直到了listen操作会在内核初始化一个epoll表,并将listen的描述符加入到epoll表中 如何保证epoll表初始化一次 前文我们看到pollDesc的init函数中调用了runtime的pollOpen函数完成的epoll创建和描述符加入,这里 ...
分类:
Web程序 时间:
2020-05-20 14:12:55
阅读次数:
48
之前分别记录了epoll(并发程序设计3:多路IO复用技术(2)),select和poll(并发程序设计2:多路IO复用技术(1))的用法,本节比较一下它们各自的特点。 1. select和poll的不同 (1) select和poll的原理和用法基本上是一样的,其内部实现机制也差不多,主要区别在于 ...
分类:
其他好文 时间:
2020-05-19 14:23:54
阅读次数:
46
应该从不同角度看libevent的同步/异步、阻塞/非阻塞: IO数量的角度:select出来之前,会阻塞在一个io上,处理完成后再阻塞在下一个io上;之后就是把所有的io fd拿过来,都不阻塞,一个一个fd去询问是否可读,每次询问完后把可读的io fds返回;所以说:libevent是非阻塞的; ...
分类:
其他好文 时间:
2020-05-16 12:46:00
阅读次数:
99
OpenResty搭建高性能服务端 Socket编程 Linux Socket编程领域为了处理大量连接请求场景,需要使用非阻塞I/O和复用,select、poll、epoll是Linux API提供的I/O复用方式,自从Linux2.6中加入了epoll之后,高性能服务器领域得到广泛的应用,Nign ...
分类:
其他好文 时间:
2020-05-14 15:20:05
阅读次数:
86
安装各种服务器软件 nginx 安装完成之后,直接使用ip地址访问服务器,就可以看到nginx的默认欢迎页面了。 如果安装报错比如80端口占用,说明此前安装了其它网络服务器,建议全都关掉再安装,并且让nginx独占80端口作为反向代理服务器 安装完成之后配置反向代理,使用whereis nginx命 ...
分类:
系统相关 时间:
2020-05-12 09:56:59
阅读次数:
82
Linux网络优化篇 概念:网络七层模型:应用层,负责为应用程序提供统一的接口。 表示层,负责把数据转换成兼容接收系统的格式。 会话层,负责维护计算机之间的通信连接。 传输层,负责为数据加上传输表头,形成数据包。 网络层,负责数据的路由和转发。 数据链路层,负责 MAC 寻址、错误侦测和改错。 物理 ...
分类:
系统相关 时间:
2020-05-07 22:55:14
阅读次数:
88
单线程和高性能 数据都在内存中,运算基于内存而不是磁盘,快速; 单线程,避免了多线程频繁切换带来的性能损耗; 单线程如何处理高并发连接: 多路复用:利用epoll来实现io多路复用。 多路复用 注意点: 1.尽量避免使用key命令。比如redis存有上百万条数据,redis读取一般10w/s,起码也 ...
分类:
其他好文 时间:
2020-05-04 21:44:58
阅读次数:
65
Fly.js 的定位是成为 Javascript http请求的终极解决方案,也就是说,在任何能够执行 Javascript 的环境,只要具有访问网络的能力,Fly都能运行在其上,并提供统一的Promise based API。 Github: https://github.com/wendux/f ...
分类:
编程语言 时间:
2020-05-03 20:46:32
阅读次数:
91
聊聊select, poll 和 epoll 假设项目上需要实现一个TCP的客户端和服务器从而进行跨机器的数据收发,我们很可能翻阅一些资料,然后写出如下的代码。 服务端 void func(int sockfd) { char buff[MAX]; int n; // infinite loop f ...
分类:
其他好文 时间:
2020-05-03 20:08:14
阅读次数:
52
慢系统调用(slow system call):此术语适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用是指调用有可能永远无法返回,多数网络支持函数都属于这一类。如:若没有客户连接到服务器上,那么服务器的accept调用就没有返回的保证。 EINTR错误的产生:当阻塞于某个慢系统调用的一个进程捕获 ...
分类:
其他好文 时间:
2020-05-01 01:12:10
阅读次数:
82