2012-04-04 51 views
5

Tôi đang viết lại ứng dụng đa luồng Linux-2.6.32 + để thay thế select bằng epoll.Lợi ích của việc sử dụng epoll_create1() thay vì epoll_create()

Các trang người đàn ông cho epoll_create1(2) tuyên bố rằng:

Nếu cờ là 0, sau đó, khác với thực tế là kích thước luận lỗi thời bị rơi, epoll_create1() cũng giống như epoll_create().

Tuy nhiên, không phải là lập luận này kích thước lỗi thời sử dụng trong epoll_wait(2) như maxevents?

epoll_wait(int epfd, struct epoll_event *events, 
        int maxevents, int timeout); 

Điều này có nghĩa khi sử dụng epoll chúng ta có thể tránh khai báo số lượng tối đa các sự kiện trong epoll_create1 nhưng sớm hay muộn chúng ta phải tham khảo nó khi gọi epoll_wait? Nếu vậy, điểm của việc đưa epoll_create1 vào trò chơi là gì?

Cảm ơn bạn đã khai sáng cho tôi về chủ đề này.

Trả lời

6

Không, với epoll_wait, maxevents cho bạn biết số lượng sự kiện tối đa sẽ được trả về là . Nó không có gì để làm với bao nhiêu được duy trì trong hạt nhân.

Phiên bản cũ hơn của epoll_create sử dụng kích thước để đặt giới hạn nhất định nhưng không còn được sử dụng, do đó nhận xét rằng đối số size đã lỗi thời.

Lợi thế của việc sử dụng epoll_create1 là nó cho phép bạn chỉ định cờ, mà tôi cho rằng hiện đang bị giới hạn ở close-on-exec (để trình mô tả tệp tự động đóng khi exec nhập quy trình khác).

+0

Cám ơn giải thích điều này. Trong 'epoll_create1' tôi chỉ để cho hạt nhân tự kích thước nó là cấu trúc bên trong, được rồi. Tôi đã nghĩ rằng tham số 'maxevents' sẽ bị loại bỏ nhưng không phải vậy. – noisebleed

1

epoll_create1() cung cấp cách đặt cờ. Không cần thiết lập kích thước ngay bây giờ.

thực sự trong mã nguồn kernel: /fs/eventpoll.c

SYSCALL_DEFINE1(epoll_create, int, size) 
{ 
    if (size <= 0) 
     return -EINVAL; 

    return sys_epoll_create1(0); 
} 

các paramete epoll_wait()max_events là để kiểm soát trở lại fd đếm không phải là tổng số fd trên phạm vi toàn eventpoll struct

+0

OK, bây giờ tôi thấy rằng đối số 'kích thước' của' epoll_create' và 'maxevents' của' epoll_wait' không giống nhau. Cảm ơn. – noisebleed

Các vấn đề liên quan