需求: 程序有两类线程组成。主线程A1, A2, A3(有若干个)和辅线程b(一个)。主线程A1, A2, A3负责向线程b发送请求。(A1发送a1,b1,c1,d1), (A2发送a2, b2, c2, d2), .....
b处理完成后b1或者c1. 唤醒A1继续操作。完成a2唤醒A2。完成...唤醒A3.
由于A, b, A1, A2属于不同的线程,所以他们之间通过select(因为还有可能操作其他的socket, 所以不能使用waitforxxx之类的)来等待,通过向pipe写入数据来唤醒。
问题是: 应该为每个请求分配一个pipe, 还是为每个线程分配一个pipe?
1、如果是每个线程分配一个pipe,那么线程从select/kqueue/epoll返回之后必须自己轮询那些请求已经完成。
2、如果是每个请求分配一个pipe, 因为一般的请求很多(比线程多很多)所以比较占用文件描述符。如果多个线程对一个请求绑定的pipe进行select/kqueue/epoll情况会如何呢。必须维护大量的pipe。
阅读(1052) | 评论(0) | 转发(0) |