【问题标题】:libevent: some questions about event priority and `event_priority_set()`libevent:关于事件优先级和 `event_priority_set()` 的一些问题
【发布时间】:2013-06-19 10:50:03
【问题描述】:

我有一些关于 libevent 事件优先级的问题

1 优先编号范围是多少?

手册中的 2,上面写着 By default, libevent assigns the middle priority to all events unless their priority is explicitly set. 那么确切的默认优先级编号是多少?

3 优先级越高,数字越小还是越大?

4 libevent中有两个与事件优先级相关的函数。 event_priority_init()event_priority_set,它们有什么区别?

5 event_priority_set(struct event *ev, int pri) 的返回值是什么?我注意到一篇文章说:when an event is ready, it can't be set and calling of this function returns -1。我真的不明白这是什么意思?谁能解释一下?谢谢!

6 我可以在注册后修改事件优先级吗?比如一开始我把优先级设置为10,后来我设置为5,然后我设置为10,blalba

顺便说一句:目前,我的 基数 = event_init(); event_base_priority_init(base, 4);

event_set(ev, sockfd, EV_READ, callback, arg);
event_base_set(base, ev);
event_add(ev, NULL);
event_priority_set(&ev, 2);

 .....
 // set and add some other events
 ....

event_base_dispatch(base);

它运行没有错误,但我不知道event_priority_set(&ev, 2)的位置是否正确,所以我不知道是否设置了优先级。

【问题讨论】:

    标签: network-programming epoll libevent


    【解决方案1】:

    这里没有什么是你在 Nick 写的这本伟大的书中找不到答案的:

    http://www.wangafu.net/~nickm/libevent-book/Ref4_event.html

    1/ 您通过调用 event_base_priority_init() 来设置范围。

    2/如果不设置优先级,“默认为事件库中的队列数,除以2。”

    3/ 数字越小优先级越高。

    4/ 您应该使用 event_base_priority_init() 而不是 event_priority_init() 已弃用。 event_base_priority_init() 设置基的优先级数,而 event_priority_set() 设置事件的优先级。

    5/ 您不能对已添加到事件循环 (event_add()) 的事件使用 event_priority_set()。

    6/ 你需要先用 event_del() 从事件循环中移除它。

    【讨论】:

    • the default is the number of queues in the event base。事件库中的默认队列数是多少?
    • 默认只有一个优先级队列。
    • 对于 5,你的意思是 event_priority_set() 应该在 event_add() 之前,请看我的更新。谢谢!
    • 如果 event_priority_set() 没有返回错误,则设置了优先级。否则很可能是 libevent 中的错误。请参阅我昨天提供的链接中的示例,在“具有优先级的事件”部分。
    • @Remi Gacogne,请告诉我,优先级有什么影响?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2011-10-19
    • 2022-11-16
    • 1970-01-01
    • 2011-06-30
    • 2021-07-20
    相关资源
    最近更新 更多