自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(34)
  • 资源 (2)
  • 收藏
  • 关注

转载 排序算法总结

<br />1 选择排序<br />每次遍历选择最小的元素,插入到数组的前端(前端随着遍历次数向后移动,直到N-1)。<br />复杂度   N*N<br />优点:移动数据的次数小(最多N-1),对于Item很大的应用来说,节省内存搬移的时间。<br />缺点:不能有效利用现有的排序信息,即使是已排序好情况下,还是会比较很多次。<br /> 排序算法总结<br />花了很长时间终于把排序的基础学了一下,这段时间学了很多东西,总结一下:<br />学的排序算法有:插入排序,合并排序,冒泡排序,选择排序,希尔

2010-07-11 15:07:00 869

原创 数据包发送与邻居子系统

<br />数据包从L4传到IP后,IP调用路由子系统来查询路由,并且在查询到路由后,创建一个新的邻居项(struct neigh)<br />与该路由项绑定。该neigh的初始状态为INCOMPLETE,此时在调用发送函数ip_finish_output2中调用<br />if (dst->hh)<br />  return neigh_hh_output(dst->hh, skb);<br /> else if (dst->neighbour)<br />  return dst->neighbour-

2010-06-21 21:39:00 1452

原创 TCP/UDP 分片问题

<br />区别:<br />应用层调用TCP发送一个数据包,如果大小超过MTU,在TCP层会分片(其中会应用到PMTU Probe),然后调用函数ip_queue_xmit<br />来直接组装成IP包,发送出去;<br />如果是UDP,则直接调用ip_append_data,该函数把用户输入的一整个数据包分片,在接收方则IP组片成原来的UDP数据包。<br /> <br />直接的效果是:<br />TCP数据包是流式的,用户无法在应用层对数据包定界<br />而UDP包如果不超过IP包的最大(655

2010-06-21 21:04:00 1399

转载 红黑树的删除

关于红黑树的平衡——删除节点的平衡条件[转载]网上一直都没有关于删除算法的好文章和实现,在这里记下来,方便日后使用。 删除操作总是在只有一边有孩子的节点或者叶子节点上进行的,绝不会在一个有二个孩子的节点上进行删除操作。而successor函数只有在节点有2个孩子的时候被调用,这个时候,该函数一定是沿节点的右子树向下进行的,最终会找到一个只有一个孩子的节点。 会破坏那些平衡条件

2010-04-29 21:21:00 3436

转载 MySQL之Covering Index

http://hi.baidu.com/thinkinginlamp/blog/item/a352918fe70d96fd503d925e.html2009年01月12日 星期一 下午 08:35作者:老王在网上随便搜搜,就能找到大把的关于MySQL优化的文章,不过里面很多都不准确,说个常见的:SELECT a FROM ... WHERE b = ...一般来说,很多

2010-03-11 22:11:00 821

原创 MySQL优化之——表策略和索引

本文试图从数据表创建的策略(schema)和索引的角度描述优化选择。最优化数据类型数据越小越好。选择满足需求的最小数据类型。通过节省更多的磁盘空间,内存以及cache,使得你的数据库更快。选择简单的类型。整形值相比于字符型的代价较小,因为字符集和校对规则的关系。比如说应该存储日期和时间,而不是个字符串;IP地址也应该用数字保存。尽可能的避免NULL。尽量把数据列定义为NOT N

2010-03-11 19:53:00 806

原创 SQL 语句优化

JOIN优化MySQL中join的实现采用的是Nested Loop Join算法。通过驱动表的结果集作为循环基础数据,然后将该结果集中的数据作为过滤条件一条条的到下一个表中查询数据,最后合并结果,如果存在后续表,过程也如此。尽量减少join语句中nested loop循环的次数。最有效的方法是让驱动表的结果集尽可能的小优先优化nested loop中的内层循环保证join

2010-03-09 21:06:00 897

转载 MySQL 索引概述

本文介绍了数据库索引,及其优、缺点。针对MySQL索引的特点、应用进行了详细的描述。分析了如何避免MySQL无法使用,如何使用EXPLAIN分析查询语句,如何优化MySQL索引的应用。本文摘自《MySQL 5权威指南》(3rd)的8.9节。(2007.07.05最后更新)    索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。   

2010-03-08 16:19:00 893

转载 MySQL 内存模型

对于任何一个数据库管理系统来说,内存的分配使用绝对可以算的上是其核心之一了,所以很多希望更为深入了解某数据库管理系统的人,都会希望一窥究竟,我也不例外。 从内存的使用方式MySQL 数据库的内存使用主要分为以下两类 * 线程独享内存 * 全局共享内存 今天这篇文章暂时先分析 MySQL 中主要的 “线程独享内存” 的。 在 MySQL 中,线程独享内存主要用于各客户端连接线程存储各种操作的独享数据

2010-03-08 15:07:00 2204

原创 EPOLL 内核实现

epoll是由一组系统调用组成。     int epoll_create(int size);     int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);     int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int time

2010-03-02 14:13:00 5697 4

原创 Linux TCP数据包接收处理

在接收流程一节中可以看到数据包在读取到用户空间前,都要经过tcp_v4_do_rcv处理,从而在receive queue中排队。在该函数中,我们只分析当连接已经建立后的数据包处理流程,也即tcp_rcv_established函数。 tcp_rcv_established函数的工作原理是把数据包的处理分为2类:fast path和slow path,其含义显而易见。这样分类的目的

2010-02-25 14:54:00 12019 1

原创 Linux TCP 拥塞控制实现机制

几个重要的计数器:packets_out    : snd.una后面的数据包sacked_out     :由SACK确认的数据包(当没有SACK时,duplicate ack 也使该计数+1)lost_out          :网络中丢失的数据包的估计retrans_out    :重传数据包计数 其中lost_out是一个估计值,  取决于具体实现。驻留于网络中

2010-02-25 14:53:00 3477 2

原创 Linux TCP数据包接收流程

   TCP接收方存在3种队列:1 Backlog Queue (sk->backlog)2 Prequeue Queue (tp->ucopy.prequeue)3 Receive Queue (sk->receive_queue) 然后来看3个队列的区别。 首先sk_backlog队列是当当前的sock在进程上下文中被使用时,如果这个时候有数据到来,则将数据拷贝到sk_ba

2010-02-23 20:30:00 6699 3

原创 TCP 发送流程

socket编程中tcp发送的调用有好几个:send, sendmsg, sendpage。不过这些调用都可以归结到内核函数tcp_sendmsg。int tcp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t size){ struct sock *sk = sock->

2010-02-23 19:15:00 4391 2

原创 TCP三步握手建立连接(3)-----被动连接方接收ACK处理

2010-01-30 21:34:55 和前面一样,被动连接方也进入tcp_v4_hnd_req函数处理,不过由于前面受到SYN时已经建立了连接请求(假设SYNCOOKIES没启用),inet_csk_search_req函数返回建立的连接请求结构request_sock。流程进入tcp_check_req处理/* * Process an incoming packet

2010-01-30 21:34:00 3510

原创 TCP三步握手建立连接(2)-----被动连接方发送SYN/ACK

2010-01-30 15:57:28 本过程分析的基础建立在本地TCP已经调用了listen进入了监听状态,至于数据包如何进入tcp这里暂且不表。tcp数据包的入口函数tcp_v4_rcv,该函数在检验数据包的正确性后,找到对应的INET SOCKET,对于SYN包,找到的是对应的Listen状态的sock。后面的处理无论是数据包进入backlog,还是prequeue,最后都会

2010-01-30 15:46:00 5244 1

原创 TCP三步握手建立连接(1)-----主动连接syn包发送

2010-01-30 13:25:52 TCP连接的建立一般是服务器端进入监听状态,然后客户端调用connect来连接。本文分析connect调用的过程,也即第一个syn报文的发送。 connect对应的系统调用是sys_connectSYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,

2010-01-30 13:23:00 5924 1

原创 socket编程相关

发送缓冲区至少为3倍的MSS,可使网络充分利用sockaddr_in结构体使用前要清零使用connect后的UDP性能可以得到提升 

2010-01-28 10:57:00 960

原创 connect 设置超时

在connect调用后,TCP开始3步握手,直到对方发ACK包过来时connect调用才返回(阻塞情况下)。如果没有ACK,connect会一直阻塞直到系统设置的等待时间消耗。在应用中可以利用select的超时机制来实现connect的超时。/********************************************/ /**** 作者::夕君

2010-01-28 10:55:00 4114

原创 TIME-WAIT状态

关于time-wait状态只有发起主动关闭的一方进入此状态。例外情况是双方同时关闭,这时都进入此状态在此状态中停留的时间是2MSL,MSL定义为30秒到2分钟,linux定义的是30秒,所以停留1分钟如果此状态下有数据达到,就重置该定时器。time-wait状态下按理对方关闭了连接,不会有数据到来的。下面是time-wait存在的必要性:对于主动关闭方,最后要发

2010-01-27 21:34:00 2543

原创 shutdown详解

int shutdown(int socket, int how);shutdown函数可以实现半关闭。当参数how为0时,关闭该socket的接收。Linux丢弃接收缓冲区中的数据,并且对新到的数据确认后直接丢弃;当how为1时,关闭socket的发送。应用程序在此之后不能发送任何数据;当发送缓冲中的数据全部发送后,TCP发送一个FIN给对方。该关闭较常用。how为2相当

2010-01-27 20:08:00 1132

原创 Nagle算法

Nagle算法的目的是避免TCP发送大量的小数据包。TCP在接收到前一个小段的ACK消息之前,一直保存小数据包。Nagle算法通常在实现时要求做到,如果存在任何未确认的数据就不能发送小数据包。BSD的实现是允许在空闲链接上发送大的写操作剩下的最后的小段。 Nagle算法是silly window syndrome(SWS)预防算法的一个半集。SWS算法预防发送少量的数据,N

2010-01-27 19:25:00 3223

原创 TCP拥塞控制基础——Jacobson[88]

Jacobson【88】是当前TCP协议的拥塞控制算法的基石,其重要性不言而喻。在其论文中提出的算法有:(1) RTT 变化的预计(2) 重传定时器的指数规避(exponential backoff)(3) 慢启动(4) more aggressive receiver ack policy(5) 拥塞窗口的动态调整 以上算法建立于下面的准则之上:The flo

2010-01-27 15:33:00 1596

原创 TCP连接中断检测

tcp保持一个keepalive定时器,在连接空闲了一定时间间隔后发送一个keepalive数据报给对方:1 如果对方主机可达到并且对方应用程序在运行,对方TCP就会响应一个ACK;本地TCP重置keepalive定时器2 如果对方主机可达但是对方应用程序关闭,对方TCP就会以RST报文响应;本地TCP断开连接并且返回RCONNREST错误给应用程序;3如果对方主机没有发送ACK或

2010-01-27 14:38:00 1106

原创 网络广播类型

1 有限广播目的地址为255.255.255.255,该类广播只在本地,不会被路由器转发 2 网络直接广播目的地址有网络号和全1的主机号组成。这种数据报传播给目的网络的所有主机。路由器默认转发此类数据报 3 子网直接广播目的地址有网络号,子网号以及全1的主机号组成;CIDR不区别对待3和2 4 全子网直接广播已废弃。

2010-01-27 13:02:00 892

原创 recv选项MSG_PEEK

如果在recv的时候,flag字段设置了MSG_PEEK,则读取数据包的时候,不会把该数据包从缓存队列中删除;下次读取时还是这个数据包。tcp_recvmsg源代码  if (!(flags & MSG_PEEK)) {   sk_eat_skb(sk, skb, copied_early);   copied_early = 0; } /** * sk_eat_skb

2010-01-27 11:01:00 4554

原创 c语言深度剖析——读书笔记

1 sizeof 是个关键字,不是函数 sizeof a 是正确的,sizeof int 则是错误的; 2 case语句后面只能为整形或字符型的常量或常量表达式,按执行频率排列多个case语句;

2009-10-28 11:33:00 582

原创 lighttpd源代码分析1--http请求处理流程

原理 lighttpd的事件处理是由一个状态机完成的。                                                                                    connect waiting for a connection reqstart init the read-idle timer

2009-10-27 07:28:00 4863

转载 C++优化考虑

一. 优化之前 在进行优化之前,我们首先应该做的是发现我们代码的瓶颈(bottleneck)在哪里。然而当你做这件事情的时候切忌从一个debug-version进行推断,因为debug-version中包含了许多额外的代码。一个debug-version可执行体要比release-version大出40%。那些额外的代码都是用来支持调试的,比如说符号的查找。大多数实现都为debug-version

2009-09-09 17:02:00 1611

原创 内核技巧

如果要访问某个全局变量先加锁取出值,原值reset解锁处理 这样不需要长时间的占有锁 struct sk_buff *clist;  local_irq_disable( ); clist = sd->completion_queue; sd->completion_queue = NULL;

2009-07-12 17:24:00 547

转载 内核中断机制

Only one old-style bottom half can run at any time, regardless of the number of CPUs 旧式的BH不能并行执行 Only one instance of each tasklet can run at any time. Different tasklets can run concurren

2009-07-12 10:46:00 690

原创 数据包的发送流程——基于RTL8139网卡(2)

 我们知道对应每一个设备都有一个或几个发送的队列,它们是在驱动加载的时候就初始化的。RTL8139的发送队列只有一个,在alloc_netdev_mq中初始化:tx = kcalloc(queue_count, sizeof(struct netdev_queue), GFP_KERNEL);         if (!tx) {                   print

2009-03-09 20:08:00 1867

原创 数据包的发送流程——基于RTL8139网卡(1)

    int dev_queue_xmit(strcut sk_buff *skb){        struct net_device *dev = skb->dev;        struct Qdisc *q;        int rc = -ENOMEM;                if (netif_needs_gso(dev,skb))        

2009-03-09 19:47:00 3048

原创 网卡驱动数据包接收流程——基于RTL8139网卡

 1 中断函数static irqreturn_t rtl8139_interrupt (int irq, void *dev_instance) 所有有网卡产生的中断都会引起该中断函数的调用,这是在static int rtl8139_open (struct net_device *dev){ struct rtl8139_private *tp = netdev_priv(dev

2009-03-08 11:20:00 3028

MIT的算法导论课件

MIT的算法导论的课件,多个PDF文档,很实用

2010-05-05

视频实时传输软件

能够支持mpeg4,H264等视频在网络上的传输,且有实时的控制

2008-07-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除