总结以下最近学到的东西

好久没更新了,最近工作其实挺忙的,不过真的学到了很多东西,下面就来自己盘点一下:

 

最近一直在进行的都是编写服务器,其实每当自己有了一定的体会后都会发现之前的很多自己认为比较精辟的东西事实上可能只不过是一些非常普通的trick.

 

几个月前编写的第一个服务器是用python编写的一个用于访问数据库的服务器,当时很兴奋,因为通过那次编写我了解到一个TCP服务器大概的样子,一个IO模型,然后还有收数据包时需要对接收缓冲中的数据进行重新的组装,然后逻辑层怎样处理收到的数据包.还知道了如果逻辑层需要的时间很多,还可以用线程池来处理逻辑,使得逻辑不至于阻塞.不过那毕竟只是一个非常简单的服务器.

 

之后,听说了windows平台最快的IO模型是IOCP,linux平台下最快的IO模型是EPOLL,我就去了解了以下这两中IO模型,EPOLL和SELECT更像一些,IOCP在开始理解的时候就有点难了,因为牵扯到一个概念叫重叠IO,其实主要是看<window网络编程>的时候太急了,就导致看书的顺序错了,好多概念还没建立的时候就直接去看完成端口,最后耐着性子才理解了.不过看完了这个以后,如果说,编写第一个服务器是我走出去的第一步的话,这个就是第二步.因为知道了这些以后,我就有了自己尝试编写一个C服务器底层的冲动.

 

当我开始用C编写服务器的时候,发现了很多问题,第一听说要内存管理,但是如何管理呢?第二就是在编写的复杂性上比用python直接编写要复杂的多,不过在摸索中学到了不少东西的,内存管理,核心是内存池技术,分N个不同的大小的池,然后我想过很久一些关于智能指针的想法,关于GC的想法,不过这方面其实是一个比较高深的问题,最近还会经常去看别人的文章去学习一些别人的新的好的想法.

 

之后开始做一个UDP服务器的项目,UDP服务器我感觉,比TCP的要难写一些,因为很多东西都要自己维护,地址状态啊,包的顺序啊之类的,这些东西有很多都需要有超时的这个概念,也就是说系统中需要有时钟,然后需要有单独的线程轮循等待,这个过程中怎么样减少加锁的时间是非常重要的.一般情况下都是用另一个与锁无关的东西去记录轮循的key,然后在通过key对需要轮循的容器进行线程安全的操作.

 

然后就是流量控制,UDP的流量控制是非常重要的,流量控制第一点就是要保证流量的公平,第二点就是要保证服务器能处理过来,否则就会出现很严重的性能问题.开始的时候一直想用滑动窗口的,可是到现在还是觉得这样做的代价太大了,现在还是使用了时间片的单客户端流量限制的方式,这样的话至少是公平的.

 

然后更难做的就是UDP的可靠传输,需要用ACK的方式,不管是停止等待,还是用窗口,其实都是属于ACK方式的.

 

我知道其实还有很多要学的东西,慢慢的,东西会越学越多,然后我就可以慢慢成为高手了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值