在有一个描述字准备好时返回,但不超过由timeout参数指定的秒数和微秒数。Р根本不等待,检查描述字后立即返回,这称为轮询。这种情况下,timeout必须指向结构timeval,且定时器的值必须为0。Р Select函数的返回值如下:Р如果在指定超时值到达之前有一个或多个描述字满足条件,则函数返回值大于零;Р如果超时时间到时,没有描述字满足条件,函数返回值为0; Р六、Р1、很多服务器采用需求驱动的并发,即用传入请求来度量需求,并且以此来触发并发性的增长。(1分)但是为每个请求创建一个新线程的开销很昂贵,将消耗系统资源,创建新线程也可能花费相当多的时间,可能延迟对请求的处理,当操作系统创建新进程或线程并且切换环境的时候,服务器将不会执行。(2分)Р预分配可以控制延迟、限制最大并发数,当进程创建时间较长的时候,也能维持高吞吐量(1分)主要优点是额外开销较低,避免了在每次请求到达时创建进程的开销,可以更快的处理请求。(2分)Р2、无连接的预分配进程结构如图:(4分)Р算法和套接字:(4分,答对算法2分,套接字2分)Р多个从进程同时绑定在一个socket上调用recvfrom获得发送方的地址和其多发送的数据报,并调用sendto应答。一个数据报到达的时候系统只唤醒一个从进程。Р3、采用互斥的技术解决(答对此点给2分,后面全答对给满分)Р每个从进程在调用recvfrom前必须先调用pthread_mutex_lock来首先获取互斥量的所有权,然后再调用recvfrom接收数据。这样在任何时候只会有一个从进程阻塞在该socket的recvfrom上。当一个新的数据到达时,等候接收数据的从进程被唤醒并调用recvfrom接收数据(2分)Р接收数据完毕,pthread_mutex_unlock释放互斥量并转入sendto发送应答。此时,另外的一个从进程获得互斥量并等候接收数据。Р(2分)