首页 › 分类存档 › UC

C语言如何打印二进制整数(续)

在上篇文章《C语言小程序:打印整数的二进制》中,大笨兔给出了一个打印二进制整数的程序。程序的算法很简单,从整数的最高位开始访问,然后逐一打印出来。但是在那个程序中有一点小问题,如果你只打印一个8位的整数,前面会同时打印几十个0,有点影响阅读。
继续阅读 »

C语言:可变参数函数

函数一般的参数都是固定的,但是有些时候我们需要让函数的参数是可变的,为了满足这个需求,C语言提供了库函数stdarg.h来满足要求。
继续阅读 »

C语言小程序:打印整数的二进制

整数在内存中到底是怎样存储的?最好的方法就是将其打印出来看一看。在C的标准库中 <stdio.h>中有一个相当强大的输出函数:printf。但是它却不能够打印出整数的二进制形式。怎么办呢?自己写一个吧!
继续阅读 »

boost高并发网络框架+线程池

boost的官方例子,有单线程的网络框架,httpserver2是线程池的。下面参照网上某人的代码修改了一点(忘了哪位大仙的代码了)
测试工具,适用stressmark,测试效果非常好, 9000个/s
继续阅读 »

高并发的epoll+线程池,业务在线程池内

epoll是linux下高并发服务器的完美方案,因为是基于事件触发的,所以比select快的不只是一个数量级。
单线程epoll,触发量可达到15000,但是加上业务后,因为大多数业务都与数据库打交道,所以就会存在阻塞的情况,这个时候就必须用多线程来提速。
业务在线程池内,这里要加锁才行。测试结果2300个/s
继续阅读 »

高并发的epoll+线程池,epoll在线程池内

epoll是linux下高并发服务器的完美方案,因为是基于事件触发的,所以比select快的不只是一个数量级。
单线程epoll,触发量可达到15000,但是加上业务后,因为大多数业务都与数据库打交道,所以就会存在阻塞的情况,这个时候就必须用多线程来提速。

继续阅读 »

高并发的epoll+多线程

epoll是linux下高并发服务器的完美方案,因为是基于事件触发的,所以比select快的不只是一个数量级。
单线程epoll,触发量可达到15000,但是加上业务后,因为大多数业务都与数据库打交道,所以就会存在阻塞的情况,这个时候就必须用多线程来提速。
下面是来一个网络连接创建一个线程处理业务,业务处理完,线程销毁。实际测试结果不是很理想,在没有业务的时候的测试结果是2000个/s
继续阅读 »

__func__标识符

__func__是C99标准里面预定义标识符, 它是一个static const char[],
会在每一个使用__func__的函数里隐式定义.
继续阅读 »

fork 父子进程间信号关系

子进程继承了父进程的几乎所有的属性:
. 实际UID,GID和有效UID,GID.
. 环境变量.
. 附加GID.
. 调用exec()时的关闭标志.
. UID设置模式比特位.
. GID设置模式比特位.
. 进程组号.
. 会话ID.
. 控制终端.
. 当前工作目录.
. 根目录.
. 文件创建掩码UMASK.
. 文件长度限制ULIMIT.
. 预定值, 如优先级和任何其他的进程预定参数, 根据种类不同
决定是否可以继承.
. 还有一些其它属性.
但子进程也有与父进程不同的属性:
继续阅读 »

关于SIGPIPE信号

我写了一个服务器程序,在Linux下测试,然后用C++写了客户端用千万级别数量的短链接进行压力测试.  但是服务器总是莫名退出,没有core文件.

最后问题确定为, 对一个对端已经关闭的socket调用两次write, 第二次将会生成SIGPIPE信号, 该信号默认结束进程.
继续阅读 »