51CTO博客开发
值得学习的东西,转载~1、对查询进行优化、应尽量避免全表扫描、首先应考虑在 where 及 order by 涉及的列上建立索引。2、应尽量避免在 where 子句中对字段进行 null 值判断、否则将导致引擎放弃使用索引而进行全表扫描、如:select id from t where num is null;--可以在num上设置默认值0、确保表中num列没有null值、然后这样查询:selec
1、nginx相对于apache的优点: 轻量级,同样起web 服务,比apache占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 高度模块化的设计,编写模块相对简单 社区活跃,各种高性能模块出品迅速啊 apach
TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(一个连接会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据)。Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。 Nagle算法的基本定义是任意时刻,最多只能有一个
nginx中使用的锁是自己来实现的,这里锁的实现分为两种情况,一种是支持原子操作的情况,也就是由NGX_HAVE_ATOMIC_OPS这个宏来进行控制的,一种是不支持原子操作,这是是使用文件锁来实现。 首先我们要知道在用户空间进程间锁实现的原理,起始原理很简单,就是能弄一个让所有进程共享的东西,比如mmap的内存,比如文件,然后通过这个东西来控制进程的互斥。 说起来锁很简单,就是共享一个变量,然后
“据说”惊群问题已经是一个很古老的问题了,并且在大多数系统中已经得到有效解决,但对我来说,仍旧是一个比较新的概念,因此有必要记录一下。什么是惊群 举一个很简单的例子,当你往一群鸽子中间扔一块食物,虽然最终只有一个鸽子抢到食物,但所有鸽子都会被惊动来争夺,没有抢到食物的鸽子只好回去继续睡觉, 等待下一块食物到来。这样,每扔一块食物,都会惊动所有的
今日下午去面试这个公司,依稀记得几个很有意思题目,也算是考察个人思考逻辑能力。下面分享几个还算有意思的题目。1、有17根等长木棍,每根长度为11.1,现在切成等量的两种木棍,以下简称A木棍和B木棍。A木棍长1,B木棍长0.7 求问:最多能切出多少组木棍(1个A和1个B称为1组)。A 99 B 105 C 111 D 125解答:显然17*11.1/(1+0.7) = 111 也就是说利用率为10
数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完整地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久
转自http://www.yeolar.com/note/2012/12/16/libev/libev是一个高性能的事件循环库,比libevent库的性能要好,是基于epoll模型的封装。Nodejs就是采用它作为底层库。libev的官方文档在 这里 ,文档比较长。本文结合里面的例子对它的用法做些简单的总结。Contents例子事件循环观察器ev_ioev_timerev_periodicev_s
转自http://blog.163.com/huchengsz@126/blog/static/73483745201181824629285/ Linux 2.6内核中提高网络I/O性能的新方法-epoll I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。1、为什么select落后 首先,在Linux内核中,select所用到的FD_SET是有限的,即内核
线程池请见上一遍blog,且说下如何使用此框架。环境:Ubuntu 12.04 g++ 4.6.3解压附件AdvServer.zip到linux机器上的目录,然后解压,进入到AdvServer/src,用户可直接修改main.cc然后make,编译结果为AdvServer/src/main服务器接口定义:/********************** * Copyrigth (c) 2013,l
什么线程池,为什么要使用线程池?下面是一个比喻。阶段一、一个医院,每天面对成千上万的病人,处理方式是:来一个病人找来一个医生处理,处理完了医生也走了。当看病时间较短的时候,医生来去的时间,显得尤为费时了。阶段二、医院引进了线程池的概念。设置门诊,把医生全派出去坐诊,病人来看病先挂号排队,医生根据病人队列顺序依次处理各个病人,这样就省去医生来来去去的时间了。但是,很多时候病人不多,医生却很多导致很多
http://blog.csdn.net/guowake/article/details/66157281、修改用户进程可打开文件数限制在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用uli
GDB调试段错误,可以有效快速定位到出错该行。1、让系统在信号中断造成的错误时产生core文件修改core文件大小,需要su权限:#查看core文件设置ulimit -a#设置core大小为无限ulimit -c unlimited#设置文件大小为无限ulimit unlimited2、编译:******-ThinkPad-X60:~/workspace/AdvServer/src/util$ g
如果C++程序要调用已经被编译后的C函数,该怎么办? 因为c++支持重载,所以c和c++编译后的函数的内部标识是不一样的。假设某个C函数的声明如下: void foo(int x, int y); 该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C函数。C++提供了一
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号