freeradius框架学习
Radius采用的I/O异步模型是比较常用select模型,虽然采用这种模型一个线程能支持socket I/O路数不是很多(看系统而定,一般都会大于等于32路的),但是对于UDP转发来说,足矣。
线程池模型
radiusd的线程处理模型是比较老套的:单请求队列缓冲,多线程处理。
也就是说,一接收到数据包,就将其封装成request,调用thread_pool_addrequest 将request丢到缓冲队列里面,然后唤醒一个线程从队列里面取出请求进行处理.
本人觉得这种模型,适用于每个数据包的请求都是比较长的。如果每个请求的处理时间都比较短的话,考虑是线程之间的切换和资源的竞争,效率反而不高。
结论:radius的线程模型不适合高速转发.