Chinaunix首页 | 论坛 | 博客
  • 博客访问: 906496
  • 博文数量: 201
  • 博客积分: 8078
  • 博客等级: 中将
  • 技术积分: 2162
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-20 17:22
文章分类

全部博文(201)

文章存档

2013年(3)

2012年(11)

2011年(34)

2010年(25)

2009年(51)

2008年(77)

分类: LINUX

2008-07-24 17:39:23

需求: 程序有两类线程组成。主线程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。
阅读(1006) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~