06 2013 档案
摘要:前几天接到某互联网公司的电话面试,面试官问我两次fork()的作用,我一头雾水,说不知道。知识面还是太窄了。下面就总结下两次fork()的作用。首先,要了解什么叫僵尸进程,什么叫孤儿进程,以及服务器进程运行所需要的一些条件。两次fork()就是为了解决这些相关的问题而出现的一种编程方法。孤儿进程孤儿进程是指父进程在子进程结束之前死亡(return 或exit)。如下图所示:但是孤儿进程并不会像上面画的那样持续很长时间,当系统发现孤儿进程时,init进程就收养孤儿进程,成为它的父亲,child进程exit后的资源回收就都由init进程来完成。僵尸进程僵尸进程是指子进程在父进程之前结束了,但是父进
阅读全文
摘要:post方式相比get安全,携带数据更大,我准备所有数据都用post方式获取,这样好吗?3赞踩标记如题,准备spa[single page application]化, 全站的数据都用ajax调用, 然后全部用post方式提交/获取数据,这样做有什么不好吗?链接5天前更新tcdona625天前提问2Zoom.Quiet· 1天前实话,没有什么不好,只要你坚持,,,然后遇到复杂情况,或是自个儿手误将整个数据库删除时,才能知道为毛 RESTful 会这么蛋疼的区分5~6种情况要求不同的请求操作,,,1Leedy· 23小时前RESTful 目前来看还是非常合理的1精英王子
阅读全文
摘要:在对代码进行梳理之后,我选择将性能最关键的函数移植到内部完全用C语言编写的一个Python模块中。这基本是底层的东西,具体地说,它利用了内核的epoll机制提供了一个O(log n)的算法复杂度。在异步socket编程方面,有一些机制可以提供有关特定socket是否可读/可写/出错之类的信息。过去,开发人员们可以用select()系统调用获取这些信息,但很难大规模使用。Poll()是更好的选择,但它仍然不够好,因为你每次调用的时候都要传递一大堆socket描述符。Epoll的神奇之处在于你只需要登记一个socket,系统会记住这个特定的socket并处理所有内部的杂乱的细节。这样在每次调用的时
阅读全文
摘要:来源:叶军博客一个网站就像一个人,存在一个从小到大的过程。养一个网站和养一个人一样,不同时期需要不同的方法,不同的方法下有共同的原则。本文结合我自已14年网站人的经历记录一些架构演变中的体会。1:积累是必不可少的架构师不是一天练成的。1999年,我作了一个个人主页,在学校内的虚拟空间,参加了一次主页大赛,几个DREAMWEAVER的页面,几个TABLE作布局,一个DB连接,几行PHP的代码嵌入在HTML中,再用FTP传到服务器上就可以给别人展示一个网站。2000年,个人主页已经不能满足好奇,在当时的网管中心管起几台机器,作起网线水晶头,用ALL PEOPLE SEEMS TO NEED DAT
阅读全文
摘要:分类:VC2011-03-16 10:20396人阅读评论(0)收藏举报磁盘windows存储虚拟内存与内存映射文件是操作系统内存管理的重要部分,二者有相似也有不同的地方,本文是作者学习与应用中得到的一些体会,有错误的地方,请提点。二者的联系:虚拟内存与内存映射文件都是将一部分内容加载的内存,另一部分放在磁盘(硬盘)上的一种机制。二者都是应用程序动态性的基础。由于二者的虚拟性,对于用于而言,都是透明的。学过操作系统的都知道虚拟内存其实就是硬盘的一部分,是计算机RAM与硬盘的数据交换区。因为实际的物理内存可能远小于进程的地址空间,这就需要把内存中暂时不用到的数据放到硬盘上一个特殊的地方,当请求的
阅读全文
摘要:分类:C++学习2012-02-23 09:48750人阅读评论(1)收藏举报存储memcached算法allocation数据结构工作内存碎片的产生:内存分配有静态分配和动态分配两种静态分配在程序编译链接时分配的大小和使用寿命就已经确定,而应用上要求操作系统可以提供给进程运行时申请和释放任意大小内存的功能,这就是内存的动态分配。 因此动态分配将不可避免会产生内存碎片的问题,那么什么是内存碎片?内存碎片即“碎片的内存”描述一个系统中所有不可用的空闲内存,这些碎片之所以不能被使用,是因为负责动态分配内存的分配算法使得这些空闲的内存无法使用,这一问题的发生,原因在于这些空闲内存以小且不连续方式出现
阅读全文
摘要:TCP详解一、TCP协议1、TCP 通过以下方式提供可靠性:◆ 应用程序分割为TCP认为最合适发送的数据块。由TCP传递给IP的信息单位叫做报文段。◆ 当TCP发出一个报文段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能记时收到一个确认,它 就重发这个报文段。◆ 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常延迟几分之一秒。◆ TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化如果收到报文段的检验和有差错,TCP将丢弃这个报文段和不确认收到这个报文段。◆ 既然TCP报文段作为IP数据报来传输,而IP
阅读全文
摘要:2012-01-16 10:48:06分类:C/C++epoll的高效实现原理原文地址:http://blog.chinaunix.net/space.php?uid=26423908&do=blog&id=3058905开发高性能网络程序时,windows开发者们言必称iocp,linux开发者们则言必称epoll。大家都明白epoll是一种IO多路复用技术,可以非常高效的处理数以百万计的socket句柄,比起以前的select和poll效率高大发了。我们用起epoll来都感觉挺爽,确实快,那么,它到底为什么可以高速处理这么多并发连接呢?先简单回顾下如何使用C库封装的3个ep
阅读全文
摘要:EPOLL LT和ET区别2012-05-21 15:34440人阅读评论(0)收藏举报socketdescriptorstructstreamlinux编程原帖:http://www.vimer.cn/2009/10/epoll%E5%B7%A5%E4%BD%9C%E6%A8%A1%E5%BC%8F%E8%AF%A6%E8%A7%A3.htmlselect/epoll的区别select的特点:select 选择句柄的时候,是遍历所有句柄,也就是说句柄有事件响应时,select需要遍历所有句柄才能获取到哪些句柄有事件通知,因此效率是非常低。但是如果连接很少的情况下, select和epoll的
阅读全文
摘要:系统调用1什么是系统调用系统调用,顾名思义,说的是操作系统提供给用户程序调用的一组“特殊”接口。用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务,比如用户可以通过文件系统相关的调用请求系统打开文件、关闭文件或读写文件,可以通过时钟相关的系统调用获得系统时间或设置定时器等。从逻辑上来说,系统调用可被看成是一个内核与用户空间程序交互的接口——它好比一个中间人,把用户进程的请求传达给内核,待内核把请求处理完毕后再将处理结果送回给用户空间。系统服务之所以需要通过系统调用来提供给用户空间的根本原因是为了对系统进行“保护”,因为我们知道Linux的运行空间分为内核空间与用户空间,它们各自运行在
阅读全文
摘要:Nagle 算法2011-12-01 22:09:56|分类:网络编程|标签:linux网络编程nagle算法|字号订阅1. Nagel算法 TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(一个连接会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据)。Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。 Nagle算法的基本定义是任意时刻,最多只能有一个未被确认的小段。 所谓“小段”,指的是小于MSS尺寸...
阅读全文
摘要:性能分析知识整理2012年11月17日admin发表评论阅读评论性能通过blktrace, debugfs分析磁盘IOThinking Clearly about PerformanceMethod R及相关阅读http_load手册web 性能测试中的几个关键指标:并发用户数,QPS,用户平均请求等待时间并发用户数和QPS两个概念没有直接关系,但是如果要说QPS时,一定需要指明是多少并发用户数下的QPS,否则豪无意义,因为单用户数的40QPS和20并发用户数下的40QPS是两个不同的概念。前者说明该应用可以在一秒内串行执行40个请求,而后者说明在并发20个请求的情况下,一秒内该应用能处理40
阅读全文
摘要:hash_map分析2人收藏此文章,我要收藏发表于1年前(2011-09-20 17:40) , 已有1267次阅读 ,共0个评论最近一直在使用hash_map,找时间来梳理一下(转)详细解说hash_map几句话道出map和hash_map的区别1. STL map is an associative array where keys are stored in sorted order using balanced trees. While hash_map is a hashed associated container, where keys are not stored in an
阅读全文
摘要:Nagle算法分类:网络协议栈2010-01-27 19:251613人阅读评论(0)收藏举报算法tcpstructlinuxNagle算法的目的是避免TCP发送大量的小数据包。TCP在接收到前一个小段的ACK消息之前,一直保存小数据包。Nagle算法通常在实现时要求做到,如果存在任何未确认的数据就不能发送小数据包。BSD的实现是允许在空闲链接上发送大的写操作剩下的最后的小段。Nagle算法是silly window syndrome(SWS)预防算法的一个半集。SWS算法预防发送少量的数据,Nagle算法是其在发送方的实现,而接收方要做的时不要通告缓冲空间的很小增长,不通知小窗口,除非缓冲区
阅读全文
摘要:EPOLL 内核实现分类:网络协议栈2010-03-02 14:131148人阅读评论(3)收藏举报callbackdescriptoreventsliststructfileepoll是由一组系统调用组成。 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 timeout); select/poll的缺点在于:
阅读全文
摘要:如何在linux下检测内存泄漏洪琨(hcode@21cn.com), C++程序员简介:本文针对 linux 下的 C++ 程序的内存泄漏的检测方法及其实现进行探讨。其中包括 C++ 中的 new 和 delete 的基本原理,内存检测子系统的实现原理和具体方法,以及内存泄漏检测的高级话题。作为内存检测子系统实现的一部分,提供了一个具有更好的使用特性的互斥体(Mutex)类。发布日期:2003 年 7 月 26 日级别:初级访问情况 :17939 次浏览评论:2(查看|添加评论- 登录)平均分 (38个评分)为本文评分1.开发背景在 windows 下使用 VC 编程时,我们通常需要 DEBU
阅读全文
摘要:select, poll和epoll的区别落鹤生 发布于 2011-02-15 19:01点击:331次来自:百度博客poll()系统调用是System V的多元I/O解决方案。它解决了select()的几个不足,尽管select()仍然经常使用(多数还是出于习惯,或者打着可移植的名义)TAG:epollpollselectselect()系统调用提供一个机制来实现同步多元I/O:#include<sys/time.h>#include<sys/types.h>#include<unistd.h>intselect(intn,fd_set*readfds,f
阅读全文