【发布时间】:2014-06-20 12:25:55
【问题描述】:
我有一个需要从键盘和鼠标读取数据的 Linux 进程。它需要异步执行此操作,同时还执行一些主要过程。
我想出的实现是将主进程放在一个线程中,并让两个单独的线程始终从键盘和鼠标读取()。如果Linux read() 被阻塞,键盘和鼠标线程会在主线程继续执行时被阻塞(我想要的),还是整个进程都会被阻塞?
【问题讨论】:
-
其他线程没有理由阻塞。或者,您可以只使用带有超时的
select,偶尔轮询您的输入,否则处理 main 所做的任何事情。 -
线程是一种方式;
select()是另一个。 -
您应该更喜欢 poll(2) 而不是
select(google forC10K problem),并且您想要实现 event loop -
好奇你
read(2)-ing鼠标和键盘....一般X11服务器在读取它们。 -
首选 epoll(),因为它旨在替换 select 和 poll 系统调用。关于阻塞的另一部分,一个线程上的阻塞不会阻塞同一进程的其他线程。
标签: linux asynchronous blocking