multithreading - epoll/select 用于互斥量/信号量

标签 multithreading asynchronous

当您有一组等待读/写的管道/套接字时,可以使用 epoll() 或 select() 等待所有这些,直到至少其中一个准备好读/写。

threads/pthreads 是否有类似的东西?我最接近的做法是通过阻塞互斥体的 lock() 来创建一个 sleep 线程。但是,这会为每个锁花费一个线程。

我也想过用管道代替这些锁,但也显得效率低下,而且管道数似乎限制在500个左右(至少比线程高一点)。

是的,有没有比在等待互斥体解锁时使用线程更好的解决方案?

最佳答案

eventfd 可能对您有用。它们的工作方式应该与您的管道相同,但开销要小得多。

如果您达到 1024 个打开文件的限制,您可以使用 ulimit 将其增加到您想要的数量。但是,如果您有很多锁,则应该更智能地使用 eventfd。

这里有更多信息:http://man7.org/linux/man-pages/man2/eventfd.2.html

关于multithreading - epoll/select 用于互斥量/信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6786234/

相关文章:

python - 在 RequestHandler 写入的情况下 Yield 和 Await 的不同行为(Tornado Web Framework)

python - 杀死线程不起作用

java - Java 中的管道输出流

multithreading - Pthread库实际上是用户线程解决方案吗?

node.js - NodeJS 中使用流和异步读取和处理大小文件

javascript - 如何在 .then 中传递 JS 函数的参数,或实现类似的行为?

java - 我应该用同步方法改变字段吗?

c - 为什么此 C 代码会导致竞争条件?

javascript - 如何从异步调用返回响应?

javascript - For 循环、异步等待、Promise - Javascript