摘要: 并发服务器有三种实现方式,1,多进程2,多线程3,i/o多路复用,select函数在多个描述符中选择被激活的描述符进行操作.前两个不说,就说i/o多路复用,一个进程同时有多个客户连接,即存在多个tcp套接字描述符,select()函数阻塞到任一个描述符被激活,即有数据传输,从而避免了进程为身等待一个已连接上的数据而无法处理其他连接,因而这是一种时分复用的方法.在处理客户端上的连接上取代了多进程和多线,但是就是想不通的是,他如何实现并发,如何处理多个用户同时在线?请高手指点?? 阅读全文
posted @ 2011-02-25 21:02 thinking and coding 阅读(269) 评论(0) 推荐(0) 编辑
摘要: 阻塞和非阻塞 阻塞函数在完成其指定的任务以前不允许程序调用另一个函数。例如,程序执行一个读数据的函数调用时,在此函数完成读操作以前将不会执行下一程序语句。当服务器运行到accept语句时,而没有客户连接服务请求到来,服务器就会停止在accept语句上等待连接服务请求的到来。这种情况称为阻塞(blocking)。而非阻塞操作则可以立即完成。比如,如果你希望服务器仅仅注意检查是否有客户在等待连接,有就接受连接,否则就继续做其他事情,则可以通过将Socket设置为非阻塞方式来实现。非阻塞socket在没有客户在等待时就使accept调用立即返回。#include <unistd.h> # 阅读全文
posted @ 2011-02-25 20:51 thinking and coding 阅读(376) 评论(0) 推荐(1) 编辑
摘要: 堆和栈是两个不用概念堆和栈的区别 作者: 芊珑发布日期: 2006-2-10 查看数: 125 出自: http://www.cnitexam.com 一、预备知识—程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全 阅读全文
posted @ 2011-02-25 11:48 thinking and coding 阅读(217) 评论(0) 推荐(0) 编辑