- 浏览: 1474444 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
#include <sys/types.h> #include <sys/stat.h> #include <sys/time.h> #include <sys/socket.h> #include <sys/signal.h> #include <sys/resource.h> #include <fcntl.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <sys/epoll.h> #define RUNTIMES 16 static int count, writes, fired; static int *pipes; static int num_pipes, num_active, num_writes; static int epfd; static struct epoll_event *events; unsigned long long getustime(void) { struct timeval tm; gettimeofday(&tm, NULL); return (unsigned long long) tm.tv_sec * 1000000ULL + (unsigned long long) tm.tv_usec; } void read_cb(int fd, int idx) { int widx = idx + num_active + 1; u_char ch; if (read(fd, &ch, sizeof(ch))) count++; else fprintf(stderr, "false read event: fd=%d idx=%d\n", fd, idx); if (writes) { if (widx >= num_pipes) widx -= num_pipes; write(pipes[2 * widx + 1], "e", 1); writes--; fired++; } } int run_once(long *work, unsigned long long *tr) { int i, res; unsigned long long ts, te; fired = 0; for (i = 0; i < num_active; i++, fired++) write(pipes[i * 2 + 1], "e", 1); count = 0; writes = num_writes; ts = getustime(); do { res = epoll_wait(epfd, events, num_pipes, 0); for (i = 0; i < res; i++) read_cb(pipes[2 * events[i].data.u32], events[i].data.u32); } while (count != fired); te = getustime(); *tr = te - ts; *work = count; return (0); } int main (int argc, char **argv) { struct rlimit rl; int i, c; long work; unsigned long long tr; int *cp; struct epoll_event ev; extern char *optarg; num_pipes = 100; num_active = 1; num_writes = num_pipes; while ((c = getopt(argc, argv, "n:a:w:")) != -1) { switch (c) { case 'n': num_pipes = atoi(optarg); break; case 'a': num_active = atoi(optarg); break; case 'w': num_writes = atoi(optarg); break; default: fprintf(stderr, "Illegal argument \"%c\"\n", c); exit(1); } } rl.rlim_cur = rl.rlim_max = num_pipes * 2 + 50; if (setrlimit(RLIMIT_NOFILE, &rl) == -1) { perror("setrlimit"); exit(1); } events = calloc(num_pipes, sizeof(struct epoll_event)); pipes = calloc(num_pipes * 2, sizeof(int)); if (events == NULL || pipes == NULL) { perror("malloc"); exit(1); } if ((epfd = epoll_create(num_pipes)) == -1) { perror("epoll_create"); exit(1); } for (cp = pipes, i = 0; i < num_pipes; i++, cp += 2) { if (pipe(cp) == -1) { perror("pipe"); exit(1); } fcntl(cp[0], F_SETFL, fcntl(cp[0], F_GETFL) | O_NONBLOCK); } for (cp = pipes, i = 0; i < num_pipes; i++, cp += 2) { ev.events = EPOLLIN; ev.data.u32 = i; if (epoll_ctl(epfd, EPOLL_CTL_ADD, cp[0], &ev) < 0) { perror("epoll_ctl"); exit(1); } } for (i = 0; i < RUNTIMES; i++) { run_once(&work, &tr); if (!work) exit(1); fprintf(stdout, "%lf\n", (double) tr / (double) work); } exit(0); }
发表评论
-
xl2tp 备份
2019-09-24 16:25 6772019年9月24日更新: 注意,需要开启firewall ... -
sdl笔记
2019-01-31 17:19 732sdl教程教程 https://github.com/Twin ... -
tinyemu
2019-01-24 17:59 1431参考https://bellard.org/jslinux/t ... -
aws搭建xl2tp给iphone使用
2018-12-26 21:37 18852019年12月26日 可以参考原来的配置 https:// ... -
consul的基本使用
2017-06-27 11:13 1398### 安装 [centos7上consul的安装](ht ... -
lvs的helloworld
2017-06-13 20:36 596###################lvs######### ... -
系统调用的helloworld
2017-05-04 16:14 627《2.6内核标准教程》 p293 #include < ... -
bitcoin和cgminer的安装
2017-04-05 22:45 1954参考 http://blog.csdn.net/rion_ch ... -
ceph安装和常用命令
2017-03-21 21:55 952/etc/hosts ssh-keygen ssh-copy- ... -
mobile terminal 笔记
2016-12-02 15:35 618找出旧的iphone4 越狱之后可以变个小操作系统 mobi ... -
socket基础和select(python)
2016-06-14 17:21 1797上接 c语言的socket基础ht ... -
socket基础(c语言)
2016-06-14 16:45 992不使用select 普通的基础socket连接,对多个客户端的 ... -
ffmpeg+nginx 的直播(2,直播摄像头和麦克风)
2016-05-28 20:21 4350假设我的服务器是centos7 192.168.139.117 ... -
ffmpeg+nginx 的直播(1,直播播放的视频文件)
2016-05-26 17:11 658864位操作系统centos7 ############ 1.一 ... -
socat和netcat(nc)
2016-04-29 22:36 1739转 原文链接: http://www.wenquan.name ... -
neutron基础九(qemu nat网络)
2016-02-06 17:21 1617接上基础八,kvm透传nested忽略 1.在主机ce ... -
neutron基础八(qemu 桥接网络)
2016-02-06 13:13 1541qemu的桥接和nat的qemu启动命令是一样的,但是后续的脚 ... -
neutron基础七(qemu tap)
2016-02-02 17:02 1028使用qemu 建立个虚拟机 然后用tap设备, 根据基础六,t ... -
neutron基础六(bridge fdb)
2016-01-28 18:30 2256转发表 在三台机器上建立三个namespace 192.16 ... -
南北流量
2016-01-23 23:26 1819一、三层网络架构: 接入层:负责服务器的接入和隔离 汇聚层:汇 ...
相关推荐
> 能跑10万以上的并发数, 需要修改注册表调整默认的最大端口数 - Mac > 做了初步测试, 测试环境为虚拟机中的 OSX 10.9.5, 即便修改了系统的句柄数限制, > 最多也只能打开32000多个并发连接, 或许 OSX Server 版...
直接打开简单配置以下nginx_conf就能跑。 需要的第三方库已经包含了进去。 因为有一些系统函数windows实在没有,移植工作太耗费时间。 就直接把一些模块删掉了。 epoll和poll肯定是用select了。 不过对于初学者,...
包含自己学习过的开源库,开源代码的注释版本,目前包括muduo,云风协程,epoll,go1.5.1 库名 语言 进度 木多 C ++ 已完成 云风协程 C 已完成 投票 C 已完成 go1.5.1 去 未完成
-db 禁用后台模式,程序跑在前台 -sf 程序启动后向pidlist里的进程发送FINISH信号,这个参数放在命令行的最后 -st 程序启动后向pidlist里的进程发送TERMINATE信号,这个参数放在命令行的最后
2 在Windows下 只支持select和iocp两种网络IO模型 其中iocp模型虽然可以支持高并发连接 但目前版本的iocp只支持Web服务器(有的版本使用iocp作WEB服务器都跑不通) 不支持反向代理服务器 更不支持SSL连接;...
2 在Windows下 只支持select和iocp两种网络IO模型 其中iocp模型虽然可以支持高并发连接 但目前版本的iocp只支持Web服务器(有的版本使用iocp作WEB服务器都跑不通) 不支持反向代理服务器 更不支持SSL连接;...
此外,高性能服务器通常需要高效的I/O模型,例如异步非阻塞I/O(epoll)、事件驱动编程(如libevent或libev)和信号驱动I/O。书中的代码可能演示了如何利用这些机制来提高服务器的并发处理能力。 内存管理也是关键...
这可能涉及到多线程或异步I/O模型,如epoll或select。 2. **协议转换**:由于代理需要在客户端和服务器之间传递HTTP请求,它需要正确处理请求和响应的编码、解码,例如URL编码、字符集转换等。 3. **安全性**:...
`:指定每个工作进程的最大连接数量,根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把 CPU 跑到 100%。 keepalive 超时时间 * `keepalive_timeout 60;`:指定 keepalive 超时时间为 60 秒。 客户端...
本文目的是学习Nginx+Lua开发,nginx+lua还会...在这里需要注意的是因为openresty其实也是集成了nginx,所以在一台机器上跑两个nginx可能有相应的问题,所以在安装openresty之后,机器上已有的nginx可能会有一定影响。
* 非阻塞、高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数 * 事件驱动:通信机制采用epoll模型,支持更大的并发连接 Nginx的应用现状: * Nginx已经在俄罗斯最大的门户网站── ...
4. **小包跑满万兆网卡,中断平衡**:通过调整网络配置和优化数据包处理逻辑,确保网络带宽得到充分利用。 #### 四、CDN Cache系统模型 ##### Net模块 - 使用 **epoll + O_NONBLOCK** 的I/O模型,支持高并发连接...
I / O复用(epoll ET) 无阻塞I / O,有限状态机 线程池 怎么跑 请确保您已安装 。 git clone git@github.com:Tanswer/Xserver.git cd Xserver ./autorun 完全的 http持久连接 投放静态(.html) 支持PHP...
我们需要在一台机器上跑 2 个不同的 tomcat ,避免出现端口被占用的情况,为了规范统一,我们修改全部tomca端口。分别找到tomcat6的1和2 的conf下的 server.xml。 修改Server端口 找到Server将: 改为 XXXX 在...
它支持Windows和Linux(epoll)。 有教育意义! 有教育意义! 有教育意义的!缺点: 现在它的功能还不够。 虽然它有几个工作示例。 它缺少很多功能,对于工业生产来说是必需的。 它目前不支持多线程。 虽然,我试图...
- **Select、epoll区别**:Select受限于文件描述符数量,epoll无此限制且效率更高。 - **高并发解决方案**:使用NIO、AIO、线程池等技术提高并发能力。 - **Zero Copy**:减少数据复制次数,提高性能。 - **字节流、...
- **异步IO**:考虑到爬虫的效率,可以使用epoll或libevent等库实现异步I/O,提高并发处理能力。 3. **线程与多进程** - **线程池**:为避免频繁创建和销毁线程的开销,可使用线程池管理多个任务,提高效率。 - ...
- **事件驱动模型**:如使用epoll、kqueue等系统调用实现异步非阻塞I/O,以高效处理大量并发连接。 - **多线程模型**:每个连接由一个单独的线程处理,确保并发处理的并行性,但需要考虑线程同步问题。 - **工作进程...