|
最近刚开始读cpp-httplib源码,发现它是采用blocking IO + 线程池的模式,主线程accept后,构造一个job push进线程池的任务队列中,每个连接由线程池里的某一个线程处理。既然这样,每个线程同一时刻只处理一个fd上的数据读写,为什么还要用select或者poll这样的IO复用呢?它的select_read函数里每次只是监听一个套接字,这样select或者poll意义在哪里呢?
我以前认为当出现一个线程需要同时监听多个fd上的事件,或者一个线程既要处理连接事件,又要处理io事件的情况,才需要io复用,但是httplib这种情况,负责accept的线程,以及每个连接的处理线程都是不同的线程,也就是每个线程只监听一个fd,为啥每次读fd或者accept之前还有调用select()/poll()?
可能是理解还不到位,有没有读过cpp-httplib的大佬可以指点一下?感激不尽。 |
|