Có thể epoll
(trên Linux) bằng cách nào đó hữu ích cho các tệp thông thường không? Tôi biết nó chủ yếu được sử dụng với ổ cắm nhưng chỉ cần tự hỏi.Thu thập trên các tệp thông thường
15
A
Trả lời
11
Không thực sự. epoll
chỉ có ý nghĩa đối với các bộ mô tả tệp thông thường thể hiện hành vi chặn trên đọc/ghi, như đường ống và ổ cắm. Các bộ mô tả tập tin bình thường sẽ luôn trả lại kết quả hoặc kết thúc tập tin nhiều hơn hoặc ít hơn ngay lập tức, vì vậy epoll
sẽ không làm bất cứ điều gì hữu ích cho chúng.
11
Tôi nghĩ rằng, nó sẽ thất bại tại epoll_ctl với EPERM:
EPERM The target file fd does not support epoll.
nếu tập tin không có giao diện poll()
.
Mã thực tế là http://lxr.linux.no/#linux+v3.1/fs/eventpoll.c#L1373
1373 /* The target file descriptor must support poll */
1374 error = -EPERM;
1375 if (!tfile->f_op || !tfile->f_op->poll)
1376 goto error_tgt_fput;
1377
Nghĩa là, nó hoạt động, mặc dù vô nghĩa: "Cuộc thăm dò() chức năng có trách nhiệm hỗ trợ các file thường xuyên ... các file thường xuyên phải luôn thăm dò ý kiến TRUE cho đọc và viết." http://pubs.opengroup.org/onlinepubs/009695399/functions/poll.html Trang người đàn ông epoll (4) cho biết: "khi được sử dụng làm giao diện Cấp Triggered, epoll có nghĩa là cuộc thăm dò nhanh hơn (2) và có thể được sử dụng bất cứ nơi nào sau này được sử dụng vì nó chia sẻ cùng một ngữ nghĩa. " Vì vậy, như duskwuff nói, nó sẽ không làm bất cứ điều gì hữu ích. – mkj
Điều đó thật ngớ ngẩn và sai. Các hạt nhân có thể treo lên vì rất nhiều lý do, từ đĩa quay lên (nếu ngủ), xuống đến mạng tụt hậu từ một mạng chia sẻ/ổ đĩa. Bất kỳ loại tương tác thiết bị nào cũng có thể gây ra lỗi IO. chọn/epoll/poll/kqueue nên được thực hiện để làm việc với bất kỳ bộ mô tả tập tin nào cũng như bất kỳ mô tả tệp nào sẽ cho phép không chặn. – Rahly
@Rahly Điều đó là không thể. Hạt nhân không biết trước khi ghi vào một tệp sẽ chặn - không giống như ổ cắm hoặc đường ống, bộ đệm để ghi hệ thống tệp không dành riêng cho một FD, vì vậy không có cách nào đảm bảo chúng sẽ có sẵn cho một quy trình cụ thể . – duskwuff