网络开发的一些总结
来源:互联网 发布:财务指标计算软件 编辑:程序博客网 时间:2024/06/06 05:04
(1) I/O 模型的选择,
epoll就一定好吗? 那是肯定的。
epoll最有用的就是ET模式,适合于那种有大量连接,但是有数据的连接比较少的情况,
如果你有10000个连接,但是很不幸,这10000个连接全部都有数据,你还是得遍历一把进行处理,( 这里对ET模式下怎么处理数据就不讨论了)。
这个和select, poll有什么区别。
epoll还有比select, poll先进得地方, 就在于将fd得列表维护在内核中, 而select, poll是调用一次,传递一次, 这点epoll领先是没得说得。
最主要还是epoll系统调用的实现方式采用事件方式,比poll, select的轮询方式强的多
(2) 使用非堵塞
做为网络服务器, 堵塞I/O一般情况下不予考虑
(3) 减少I/O操作和无谓的系统调用
比如利用writev一次性写入多个数据, 减少write调用的次数.
或者使用零拷贝的sendfile,tee等
(4) tcp是双工的
这点不要忽略掉, 数据转发程序就在于数据的转发速度, 这里我采用读和写分开线程的处理方式
(5) 进程还是线程
这个无关紧要,一个粒度和数据访问, 稳定性的问题。减少之间的相互影响,尽量没有关联, 比如减少对相关互斥数据的访问等等。
(6) 尽量在设计上做到不需要锁
比如使用环形缓存, 环形消息队列等
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pmunix/archive/2008/07/18/2672975.aspx
writev() function
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/uio.h>
int main(void)
{
char buf0[] = "xuzhengyang", buf1[] = "yinshulei/n";
struct iovec iov[2];
iov[0].iov_base = buf0;
iov[0].iov_len = strlen(iov[0].iov_base);
iov[1].iov_base = buf1;
iov[1].iov_len = strlen(iov[1].iov_base);
if (writev(STDOUT_FILENO, iov, 2) == -1) {
perror("writev");
exit(1);
}
exit(0);
}
Sendfile函数说明
#include <sys/sendfile.h>
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
sendfile()是作用于数据拷贝在两个文件描述符之间的操作函数.这个拷贝操作是内核中操作的,所以称为"零拷贝".sendfile函数比起read和write函数高效得多,因为read和write是要把数据拷贝到用户应用层操作.
参数说明:
out_fd 是已经打开了,用于写操作(write)的文件描述符;
in_fd 是已经打开了,用于读操作(read)的文件描述符;
offset 偏移量;表示sendfile函数从in_fd中的哪一偏移量开始读取数据.如果是零表示从文件的开始读,否则从相应的便宜量读取.如果是循环读取的时候,下一次offset值应为sendfile函数返回值加上本次的offset的值.
count是在两个描述符之间拷贝的字节数(bytes)
返回值:
如果成功的拷贝,返回写操作到out_fd的字节数,错误返回-1,并相应的设置error信息.
EAGAIN 无阻塞I/O设置O_NONBLOCK时,写操作(write)阻塞了.
EBADF 输出或者输入的文件描述符没有打开.
EFAULT 错误的地址.
EINVAL 描述符不可用或者锁定了,或者用mmap()函数操作的in_fd不可用.
EIO 当读取(read)in_fd时发生未知错误.
ENOMEM 读(read)in_fd时内存不足.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Crazyguang/archive/2008/05/09/2423708.aspx
- 网络开发的一些总结
- 网络开发的一些总结
- 网络编程的一些总结
- 插件开发的一些总结
- phpcms 开发的一些总结
- 开发的一些小总结
- 一些网络相关问题的总结
- 网络开发时用到的一些库
- 摘抄一些关于网络开发的帖子
- 开发中需要的一些网络判断
- 网络一些事总结
- 网络协议一些总结
- Android开发的一些简单的总结
- 一些网络开发函数
- iOS开发之适配IPV6更新网络处理为AFNetworking3.x, 集成以及遇到的一些问题总结。
- 前人总结的一些软件开发规范
- 前人总结的一些软件开发规范
- 用IntellIDEA开发JSP的一些总结
- 安全异常 -------异常详细信息: System.Security.SecurityException: 不允许所请求的注册表访问权。
- JS match函数
- SQL结果导出到文本文件
- Javascript控制图片间歇性轮换向上滚动
- exp导出表结构,不导出表数据。
- 网络开发的一些总结
- oracle中查询所有表
- JS Test方法
- OMSA安装
- [经典]js dom DOMDocument 属性和方法
- Oracle入门教程,新手必读
- Install CUDA 2.2 in Ubuntu 8.10
- sql2008服务启动不了
- 郑板桥难得糊涂