0%

连接数问题

在使用mysql时有时候会报too many connections错误,这是连接数过多导致的,然后就会去修改max_connections参数,但是这个参数也不能无上限的增大,容易造成机器内存不足,还是需要找到为什么会有这么多连接的原因

网络IO

Linux网络IO模型

  • 阻塞IO模型 默认情况下,所有文件操作都是阻塞的。 在进程空间中调用recvfrom,其系统调用直到数据包到达且被复制到应用进程的缓冲区中或者发生错误才返回,在此期间会一直等待。

  • 非阻塞IO模型 recvfrom从应用层到内核的时候,如果缓冲区没有数据的话,就直接返回一个EWOULDBLOCK错误,然后轮询检查这个状态,看内核是否有数据到来

  • IO复用模型 linux中提供了select/poll,通过将一个或多个fd传递给select或poll系统调用,阻塞在select操作上,这样select/poll就可以侦测多个fd是否处于就绪状态。不过其是顺序扫描且支持的fd数量有限。

    升级版的epoll基于事件驱动方式代替顺序扫描,当有fd就绪时,调用回调函数进行通知,性能更高

  • 信号驱动IO模型 通过系统调用sigaction执行一个信号处理函数(该系统调用会立即返回,进程继续工作,非阻塞)。当数据准备就绪时,为该进程生成一个SIGIO信号,通过信号回调通知应用程序调用recvfrom来读取数据

    内核通知我们何时可以开始一个IO操作,还需要通过recvfrom来读取数据,在将数据从内核复制到自己的缓冲区

  • 异步IO 告知内核启动某个操作,并让内核在整个操作(包括数据从内核复制到用户自己的缓冲区)完成后通知。

    内核通知我们操作何时已经完成

阅读全文 »

zip压缩

zip文档可以以压缩格式存储一个或多个文件,可以使用ZipInputStream读取Zip文档,使用ZipOutputStream来写入到Zip文件中

阅读全文 »

计算机中的浮点数

二进制表示小数

说到浮点数,就要先说一下小数,计算机都是使用二进制来进行表示的,所以十进制中的小数部分就是2进制中的负指数次幂

如二进制中1.011就表示为十进制的1*2^0+0*2^(-1)+1*2^(-2)+1*2^(-3),也就是1.375,其实这也是为什么在进行小数部分计算时不准确的原因

阅读全文 »

CPU的工作过程

CPU上有很多引脚,通过电流信号来给CPU发送指令或者传递数字信息,在引脚有电流通过时,数值为1,在没有电流通过时,数值为0,所以电脑只用0和1这两个数字符号来进行表示,也就是二进制的表示形式