Linux后台服务器编程。
发布时间:2014-11-10 21:11:59
这几天一直在做linux大批量数据的解决方案,不断的深入了解了一下aio,epoll,libevent,boost::asio。以前只知道他们都是做异步/非阻塞的,但是具体解决的问题的关键点是什么,通过这几天的深入了解,把他们总结一下:aio是linux2.6以后内核实现的异步IO,或者说他才是真正意义上的异步IO。epoll作为select的li.........【阅读全文】
发布时间:2014-08-01 21:14:09
对一个进程预定义了三个流,并且这三个流可以自动的被进程使用,它们是:标准输入、标准输出、和标准错误。标准I/O库提供缓冲的目的是尽可能减少使用read和write的次数。标准I/O库提供了三种类型的缓冲:1、全缓冲:在填满标准I/O缓冲区后进行实际I/O操作。对于驻留.........【阅读全文】
发布时间:2014-07-07 23:24:09
stevenrao 深圳写于2012 年 情人节。献给天下有情码农; 在Linux 开发中,有几个关系到性能的东西,技术人员非常关注:进程,CPU,MEM,网络IO,磁盘IO。本篇文件打算详细全面,深入浅出。......【阅读全文】
发布时间:2014-07-07 22:38:07
之前有介绍过关于文件的指针和描述符,这次通过一个练习,熟悉了一下文件的open,close,read,write,sleek,dup等操作,一些主要的注意事项详见代码注释吧。 ps:部分代码写的有些龌龊,也和硬要把几个函数都试到有关,应该可以用更好的方法。fighting~~~ 【功能】命令行输入三个参数,将data.dat.........【阅读全文】
发布时间:2014-07-03 16:34:00
一、fcntl函数int fcntl(int fildes, int cmd, .../*int arg*/);1.fcntl函数可以改变已经打开的文件性质。 2.主要功能:a.复制一个现有的描述符F_DUPFD:新文件描述符作为函数值返回,大于或者等于第三个参数。新描述符与filedes共享一个文件表项。但是新描述符有自己的文件描述符标志。其.........【阅读全文】
发布时间:2014-06-09 20:33:13
结合阻塞与非阻塞访问、poll 函数可以较好地解决设备的读写,但是如果有了异步通知就更方便了。异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上“中断”地概念,比较准确的称谓是:信号驱动(SIGIO)的异步 I/O。可以使用signal()函数来设置对应的信号.........【阅读全文】
发布时间:2014-06-09 17:17:07
同步IO与异步IO的区别 首先要明确一点:不同IO模型之间的差别本质上是CPU的参与方式 这里重点说一下各自的应用场景 如何选择同步还是异步呢? 主要有这么几个指标供参考 1.并发数量 2.接收字节数 3.处理请求所需CPU时间 我们一个一个来考察 并发数 并.........【阅读全文】
发布时间:2014-06-06 15:47:59
在Direct IO模式下,异步是非常有必要的(因为绕过了pagecache,直接和磁盘交互)。 linux Native AIO正是基于这种场景设计的,具体的介绍见:KernelAsynchronousI/O (AIO) SupportforLinux。下面我们就来分析一下AIO编程的相关知识。阻塞模式下的IO过程如下:int fd = open(const char *pathname, int flags, mode_t mode);.........【阅读全文】
发布时间:2014-06-05 21:45:01
在Linux和UNIX中有很多的输入输出函数,有时真是让想跟它攀点关系的菜鸟们束手无策。先来看看都有哪些函数,通过解析与总结,看看能不能让大家能这些函数有个理性的认识,哦,原来是这么回事,也就算我没白花这份闲。内核文件I/O->标准库I/O->高级I/O->IPC中1. read()/write();2. pread()/pwrite();.........【阅读全文】
发布时间:2014-06-04 17:54:59
direct io是一种不用内核缓存的io,它可以做到直接将用户空间的内存直接写入磁盘或者将磁盘数据直接读到用户空间的缓冲区,这种策略就是不用内核的缓存而使用用户自己设计的缓存,这一般在数据库系统中用到,初用linux的人在调用free命令的时候都会大吃一惊,为何文件cache占用了那么多的内存,太可怕了啊,其实这正是表.........【阅读全文】
发布时间:2014-06-03 15:08:58
首先要明白一点,就是无论你用哪种语言进行程序设计,也无论你用哪个函数进行文件操作(库函数也好,直接操作系统API也好),最终的文件打开的操作都是由操作系统来进行的,因此各种语言的情况从本质上来说都是相同的。用二进制模式打开一个文件的时候,文件本身的内容和你编写程序时用函数读到的内容完全相同(或者.........【阅读全文】
发布时间:2014-06-02 22:31:09
知道Boost中的AIO模型库是使用Epoll实现的,请看下面的讨论!应该很有帮助的,文章概论了几乎所有开发模型的效率!1: EPOLL!=AIO 我只是说Boost的网络库在linux下是用linux的epoll实现的ACE中有ACE_POSIX_AIOCB_Proactor和ACE_Dev_Poll_Reactor,分别用aio和epoll实现,这是2个不同的东西2: .........【阅读全文】
发布时间:2014-06-02 22:17:09
Unix下共有五种I/O模型阻塞I/O非阻塞I/OI/O复用(select和poll)信号驱动I/O(SIGIO)异步I/O(Posix.1的aio_系列函数)b.阻塞I/O模型 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好。 如果数据没有准备好,一直等待。。。。 数据准备好了,从内核拷贝到用户空间.........【阅读全文】
发布时间:2014-05-24 23:03:40
使用异步 I/O 大大提高应用程序的性能学习何时以及如何使用 POSIX AIO APILinux? 中最常用的输入/输出(I/O)模型是同步 I/O。在这个模型中,当请求发出之后,应用程序就会阻塞,直到请求满足为止。这是很好的一种解决方案,因为调用应用程序在等待 I/O 请求完成时不需要使用任何中.........【阅读全文】
发布时间:2014-05-22 17:19:52
1.STDIN_FILENO的作用STDIN_FILENO属于系统API接口库,其声明为 int 型,是一个打开文件句柄,对应的函数主要包括 open/read/write/close 等系统级调用。操作系统一级提供的文件API都是以文件描述符来表示文件。STDIN_FILENO就是标准输入设备(一般是键盘)的文件描述符。2.区别1)数据类型不一致:.........【阅读全文】
tianyashuibin2014-12-08 11:22
Oscarzhao:c++11 中貌似可以
嗯,是的,在c++11中可以
下面是在gcc的编译结果:
test_struct.cc:8:11: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
int a = 1;
^
tianyashuibin2014-10-23 21:57
除了静态数据成员外,数据成员不能在类体内显式的初始化
举个最简单例子
struct a
{
int a=1;
int b=2;
};
这也不能通过啊!
原因很简单,因为struct a此时只是在说明有这么个类型,而并没有定义一个具体的变量和分配内存空间
tianyashuibin2014-10-23 21:39
1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员
2.进入构造函数后在构造函数中执行一般计算
1.类里面的任何成员变量在定义时是不能初始化的。
2.一般的数据成员可以在构造函数中初始化。
3.const数据成员必须在构造函数的初始化列表中初始化。
4.static要在类的定义外面初始化。
5.数组成员是不能在初始化列表里初始化的。
6.不能给数组指定明显的初始化。
这6条一起,说明了一个问题:C++里面是不能定义常量数组的!因为3和5的矛盾。
tianyashuibin2014-10-23 21:32
记住静态成员这样初始化:
C/C++ code
class A
{
public:
static const int a[3];
};
const int A::a[3] = {1,2,3};