资源描述
计算机网络编程,第十讲 服务器并发性的统一、高效管理,目的: 设计更灵活、性能更优化的并发服务器。,计算机网络编程,电子科大计算机学院,服务器并发性的统一、高效管理,定义:服务器整个生命期中,同时并发的最大线程数量。 该参数某种意义上代表了该服务器的最大资源开销。 我们可以限制服务器的最大并发数量 也可以不限制(允许创建任意多的线程),此时该服务器的并发等级受限于操作系统的限制。,计算机网络编程,电子科大计算机学院,并发等级,当收到远程连接请求时触发线程创建 服务器的并发等级依赖于客户的需求 同时存在的连接越多,并发等级越高,计算机网络编程,电子科大计算机学院,需求驱动的并发,需求驱动虽然能够提供动态的灵活性,同时处理多个连接 但是并不一定是最优化的。因为并发是有代价的。,计算机网络编程,电子科大计算机学院,需求驱动并发的代价,在需求驱动模式下,任一时刻的并发等级反映了当时服务器已收到但还没有处理完毕的请求数目。 为每个请求创建一个新进程/线程,开销昂贵。 一方面会带来处理的时延 创建进程/线程需要较长的时间 另一方面会消耗系统资源 每个请求一个进程/线程,资源消耗大,计算机网络编程,电子科大计算机学院,额外开销和时延,预分配进程/线程可用于控制延迟、限制并发等级 主服务器在开始执行时就创建N个从进程/线程 将所接受的新的请求分配给这N个从进程/线程中的一个处理 每个进程/线程等待请求,请求到达后处理 进程/线程并不退出,从线程/进程的预分配,计算机网络编程,电子科大计算机学院,计算机通信与网络编程,电子科大计算机学院,无连接服务器中的预分配,主进程,从进程1,从进程2,从进程3,用于熟知端口的套接字,操作系统,预分配的从进程,Linux允许无连接服务器采用预分配策略。 多个从线程同时绑定在一个socket上调用recvfrom获得发送方的地址和其发送的数据报,并调用sendto应答。一个数据报到达的时候系统只唤醒一个从进程。 请思考:如果在某个系统中recvfrom会同时唤醒所有的从线程,我们还能使用预分配方式吗?如果能,说出一种可能的处理方式。,计算机通信与网络编程,电子科大计算机学院,无连接服务器中的预分配,互斥: 调用recvfrom前申请互斥,pthread_mutex_lock 调用结束pthread_mutex_unlock,根据处理机数目的多少,我们可以调整预分配从进程的数目 当系统中有K个处理器时,分配K个从进程,在最好情况下,可以使得接受处理几乎没有任何延迟。,计算机通信与网络编程,电子科大计算机学院,多处理器上的预分配,
展开阅读全文