我想要创建线程来执行特定任务,并使用线程安全的队列与它们进行通信。同时,我希望在等待时对各种文件描述符进行IO操作。
如何推荐实现这一目标?我需要创建线程间管道并在队列从无元素变为有元素时进行写入吗?难道没有更好的方法吗?
如果我必须创建线程间管道,为什么不是更多实现共享队列的库允许您将共享队列和线程间管道作为单个实体创建呢?
我要求两种语言下的解答:C++和Python。我稍微关心跨平台解决方案,但主要关注Linux。
为了更具体说明问题...
我有一些代码将在文件系统树中搜索内容。我通过套接字打开了几个与外界通信的渠道。可能会导致需要在文件系统树中搜索内容的请求将到达。
我将把搜索文件系统树的代码隔离在一个或多个线程中。我想将需要搜索树的请求放入一个线程安全的队列中,由搜索线程执行。结果将放入一个已完成搜索的队列中。
我想能够快速处理所有非搜索请求,同时进行搜索。我希望能够及时处理搜索结果。
处理传入的请求通常意味着使用epoll的事件驱动架构。磁盘搜索请求队列和返回结果队列则使用互斥锁或信号量实现线程安全。
等待空队列的标准方法是使用条件变量。但如果我需要在等待时处理其他请求,那么这种方式就行不通了。要么我一直轮询结果队列(平均延迟结果的一半),要么阻塞而不服务请求。
如何推荐实现这一目标?我需要创建线程间管道并在队列从无元素变为有元素时进行写入吗?难道没有更好的方法吗?
如果我必须创建线程间管道,为什么不是更多实现共享队列的库允许您将共享队列和线程间管道作为单个实体创建呢?
我要求两种语言下的解答:C++和Python。我稍微关心跨平台解决方案,但主要关注Linux。
为了更具体说明问题...
我有一些代码将在文件系统树中搜索内容。我通过套接字打开了几个与外界通信的渠道。可能会导致需要在文件系统树中搜索内容的请求将到达。
我将把搜索文件系统树的代码隔离在一个或多个线程中。我想将需要搜索树的请求放入一个线程安全的队列中,由搜索线程执行。结果将放入一个已完成搜索的队列中。
我想能够快速处理所有非搜索请求,同时进行搜索。我希望能够及时处理搜索结果。
处理传入的请求通常意味着使用epoll的事件驱动架构。磁盘搜索请求队列和返回结果队列则使用互斥锁或信号量实现线程安全。
等待空队列的标准方法是使用条件变量。但如果我需要在等待时处理其他请求,那么这种方式就行不通了。要么我一直轮询结果队列(平均延迟结果的一半),要么阻塞而不服务请求。