- 浏览: 724007 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1043)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (64)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
最新评论
网络服务器:http://www.ibm.com/developerworks/cn/linux/l-cn-edntwk/
“线程池”或“连接池”。“线程池”旨在减少创建和销毁线程的频率,其维持一定合理数量的线程,并让空闲的线程重新承担新的执行任务。“连接池”维持连接的缓存池,尽量重用已有的连接、减少创建和关闭连接的频率。这两种技术都可以很好的降低系统开销,都被广泛应用很多大型系统,如 websphere、tomcat 和各种数据库等。
池这种东西看起来似乎很高深,其实在服务器端一般也都这么用,不去细细想也就没察觉了.通过减少创建和销毁的频率而降低系统开销
select与epollhttp://blog.csdn.net/tfengmao/article/details/8549664
关于select, epoll虽然平时经常用,但也没怎么关注它的实现,说起来挺惭愧的
1. select的实的特点
Select 实现具有如下特点:
1)每次调用select系统调用,都需要从用户空间拷贝数据到内核空间;
2)对于每一个fd(用户可以传送一批fd)调用其对应的设备的poll函数,对于socket来说,就调用tcp_poll函数;并收集设备是否有事件发生;
3)轮询了所有fd后,若没有事件发生,该函数就挂起,直到通知有事件发生,或者超时。
对于3)中,若扫描所有fd后,没有事件发生,该调用线程会挂起,那在什么时候,由谁唤醒该线程呢?这里就需要仔细考察下poll函数了。Poll函数将会将调用的线程挂在设备的对待队列中,当设备有事件发生的时候,就会唤醒等待队列中的线程。这里,就会唤醒调用select系统调用的线程。
从上面可以看出,若用select来实现一个事件循环的话,每次循环都会将fd从用户空间复制到内核空间,并且轮询每一个fd对应的设备状态;这看起来确实不明智。
2. epoll实现的特点
从用户空间向内核空间拷贝数据,和轮询设备都是费时操作,对于fd量很多的情况下,select就明显吃力了。Epoll就在这时候诞生了,epoll的实现克服了select的在多fd情况下表现的缺陷;基本原则是采用空间换时间的策略。
1)Epoll将每一个fd所需的数据保存在内核,而不是每次系统调用都需要从用户空间复制数据到内核,只是在fd首次注册的时候复制到内核。这样内核需要空间存储fd所需的数据。
2)epoll摈弃轮询设备的做法,而是在监视的设备等待队列中添加一个等待项。
3)当设备就绪后,等待项中的回调函数会调用。该回调函数将设备事件负责到一个链表中,并且唤醒调用epoll_wait的线程。
从epoll的实现来看,采用空间换时间的策略,去掉了重复从用户空间向内核空间复制数据的操作;采用回调机制,避免了轮询设备。从而epoll在大量fd的情况下,性能明显优于select。
“线程池”或“连接池”。“线程池”旨在减少创建和销毁线程的频率,其维持一定合理数量的线程,并让空闲的线程重新承担新的执行任务。“连接池”维持连接的缓存池,尽量重用已有的连接、减少创建和关闭连接的频率。这两种技术都可以很好的降低系统开销,都被广泛应用很多大型系统,如 websphere、tomcat 和各种数据库等。
池这种东西看起来似乎很高深,其实在服务器端一般也都这么用,不去细细想也就没察觉了.通过减少创建和销毁的频率而降低系统开销
select与epollhttp://blog.csdn.net/tfengmao/article/details/8549664
关于select, epoll虽然平时经常用,但也没怎么关注它的实现,说起来挺惭愧的
1. select的实的特点
Select 实现具有如下特点:
1)每次调用select系统调用,都需要从用户空间拷贝数据到内核空间;
2)对于每一个fd(用户可以传送一批fd)调用其对应的设备的poll函数,对于socket来说,就调用tcp_poll函数;并收集设备是否有事件发生;
3)轮询了所有fd后,若没有事件发生,该函数就挂起,直到通知有事件发生,或者超时。
对于3)中,若扫描所有fd后,没有事件发生,该调用线程会挂起,那在什么时候,由谁唤醒该线程呢?这里就需要仔细考察下poll函数了。Poll函数将会将调用的线程挂在设备的对待队列中,当设备有事件发生的时候,就会唤醒等待队列中的线程。这里,就会唤醒调用select系统调用的线程。
从上面可以看出,若用select来实现一个事件循环的话,每次循环都会将fd从用户空间复制到内核空间,并且轮询每一个fd对应的设备状态;这看起来确实不明智。
2. epoll实现的特点
从用户空间向内核空间拷贝数据,和轮询设备都是费时操作,对于fd量很多的情况下,select就明显吃力了。Epoll就在这时候诞生了,epoll的实现克服了select的在多fd情况下表现的缺陷;基本原则是采用空间换时间的策略。
1)Epoll将每一个fd所需的数据保存在内核,而不是每次系统调用都需要从用户空间复制数据到内核,只是在fd首次注册的时候复制到内核。这样内核需要空间存储fd所需的数据。
2)epoll摈弃轮询设备的做法,而是在监视的设备等待队列中添加一个等待项。
3)当设备就绪后,等待项中的回调函数会调用。该回调函数将设备事件负责到一个链表中,并且唤醒调用epoll_wait的线程。
从epoll的实现来看,采用空间换时间的策略,去掉了重复从用户空间向内核空间复制数据的操作;采用回调机制,避免了轮询设备。从而epoll在大量fd的情况下,性能明显优于select。
发表评论
-
滑动窗口与拥塞控制
2017-09-29 14:47 730滑动窗口:用作流量控制: 1.发送端和接收端各维护一个独立的发 ... -
rawsocket发送tcp包
2017-09-25 11:52 932testTcp.h #ifndef TESTTCP_H ... -
柔性数组
2017-09-20 09:53 448#include <iostream> #i ... -
rawsocket发送dns包
2017-09-14 15:18 569#include <stdio.h> #in ... -
rawsocket发送icmp包
2017-09-06 09:54 620#include <stdio.h> #in ... -
netfilter
2016-10-04 20:31 450http://blog.chinaunix.net/uid-2 ... -
gdb的简单使用
2016-09-19 15:18 388注意编译的时间加上-g参数 1.调试运行 gdb a.out ... -
TCP各状态的意义
2016-03-01 14:06 391各个状态的意义如下: LISTEN - 侦听来自远方TCP端 ... -
log
2015-03-30 17:42 415log.h #ifndef __LOG_H__ #def ... -
TIMEWAIT与CLOSEWAIT
2015-03-17 11:32 615http://blog.csdn.net/kobejayand ... -
TcpClient
2015-01-16 17:46 443TcpClient.h #ifndef TCPCLIENT ... -
信号量
2014-09-26 10:20 649#include <semaphore.h> ... -
共享内存
2014-09-17 10:39 542SharedMemory.h #ifndef SHARED ... -
记录锁
2014-09-11 16:32 405#include <errno.h> #in ... -
popen
2014-09-06 14:50 584#include <stdio.h> #in ... -
大小端存储
2014-09-05 09:29 568#include <stdio.h> i ... -
条件变量(cond)
2014-09-01 11:02 830#include <pthread.h> # ... -
读写锁
2014-09-01 10:33 670#include <pthread.h> # ... -
trylock
2014-09-01 10:07 641#include <pthread.h> # ... -
线程分离
2014-09-01 10:00 659http://www.cnblogs.com/mydomain ...
相关推荐
网络游戏-用于向服务器池中的网络服务器发送消息的方法和设备.zip
"班 级 "13网络一 "学生姓名 "许富翔 "指导教师 "员志超 " " "班 " " " " " "设计(论文)题目 " 企业网络服务器的规划与管理 " "主要 "用户的需求 " "研究 "系统结构设计 " "内容 "系统的组成和安装 " " "企业网...
基于重写的muduo网络库,并可工作于nginx tcp负载均衡环境的集群聊天服务器,使用数据库连接池访问数据库 基于重写的muduo网络库,并可工作于nginx tcp负载均衡环境的集群聊天服务器,使用数据库连接池访问数据库 ...
"班 级 "13网络一 "学生姓名 "许富翔 "指导教师 "员志超 " " "班 " " " " " "设计(论文)题目 " 企业网络服务器的规划与管理 " "主要 "用户的需求 " "研究 "系统结构设计 " "内容 "系统的组成和安装 " " "企业网...
网络服务器配置与应用(Windows Server 2016)
"班 级 "13网络一 "学生姓名 "许富翔 "指导教师 "员志超 " " "班 " " " " " "设计(论文)题目 " 企业网络服务器的规划与管理 " "主要 "用户的需求 " "研究 "系统结构设计 " "内容 "系统的组成和安装 " " "企业网...
"班 级 "13网络一 "学生 "富翔 "指导教师 "员志超 " " "班 " " " " " "设计(论文)题目 " 企业网络服务器的规划与管理 " "主要 "用户的需求 " "研究 "系统结构设计 " "容 "系统的组成和安装 " " "企业网系统介绍 " ...
在c++服务器开发中,网络编程是必不可少的一部分。网络编程基础包括以下内容: 1. socket编程 2. TCP/IP协议 3. UDP协议 4. HTTP协议 ## 多线程编程 多线程编程是c++服务器开发中非常重要的一部分。多线程编程...
排除地址:地址池中得某些ip不想分配或就是不能分配例如:本服务器得ip为192、16 8、1、67,地址池为192、、168、1、1到192、168、1,200、那么此时就应将192、 168、1、67排除,否则分配出去会引起网络中ip...
本项目应用了muduo网络库、nginx的TCP负载均衡、中间件reids的发布订阅功能、数据库连接池(自制),实现了集群部署聊天服务器 本项目应用了muduo网络库、nginx的TCP负载均衡、中间件reids的发布订阅功能、数据库连接...
跨平台网络通信与服务器开发框架;支持 HTTP/MQTT/Redis/Memcache/SMTP/PING/Beanstalk/handler socket 等网络通信协议;支持线程池、协程、进程池、非阻塞、触发器等多种服务器编程模型;支持 XML/JSON/MIME/BASE64...
然后出现了服务器网络,该网络中的每台服务器都专门处理不同的应用集。现在,发展到了服务器集群,两台或多台服务器像一台服务器一样工作,提供更高的可用性和性能,这已经远远超出了您的想像。应用可从一台服务器...
包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多线程编程、进程池和线程池等内容,原理、技术与方法并重;...
网络QoS机制不足以提供完全的端到端的性能保证, 在由三层结构构成的电子商务网站中, 基于反馈控制理论, 提出并实现了在应用服务器的数据库连接池中的绝对延迟保证, 对数据库连接池作出了改进, 确保带有高优先级请求...
在网络服务器的开发过程中,Pool (池) 的概念已经被广泛地应用。使用池技术可以 明显地提高应用程序的速度,
c语言基础 acl框架库是一个C语言网络框架库,主要包含:服务器开发框架、同步异步网络通讯、常用数据结构、进程池线程池、流式xmljson解析器、httpping应用协议等内容.zip
服务器集群和RAID技术的诞生为计算机和数据池的互联网应用提供了一个新的解决方案,而其成本却远远低于传统的高端专用服务器和大型机。但是,服务器集群的集成能力低,管理这样的集群使很多管理员非常头疼。尤其是...
包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多线程编程、进程池和线程池等内容,原理、技术与方法并重;...
包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多线程编程、进程池和线程池等内容,原理、技术与方法并重;...