Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用kevent和select?_Select_Kqueue - Fatal编程技术网

如何使用kevent和select?

如何使用kevent和select?,select,kqueue,Select,Kqueue,kqueue()返回的kevent的文件描述符可以用作select()或kevent()的输入 使用这种方法的优点是什么 假设kevent正在使用kevent()等待描述符列表,并且该列表上有一些活动。kevent的文件描述符是否设置为可由select()或kevent()读取

kqueue()返回的kevent的文件描述符可以用作select()或kevent()的输入

  • 使用这种方法的优点是什么

  • 假设kevent正在使用kevent()等待描述符列表,并且该列表上有一些活动。kevent的文件描述符是否设置为可由select()或kevent()读取


  • 与select相比,此选项的主要优点是规模。当与大量文件句柄一起使用时,select()需要很多技巧和/或技巧才能有效地设置和删除,并且文件句柄的数量通常是有限的。poll()取消了对文件句柄数量的限制,但仍然存在设置/拆卸问题;并且在OSX中本机不可用

    我想为改进上下文切换做一个论证。这在windows IOCP中是正确的,尤其是在使用新的Vista API和OS线程池时。我相信这在OSX上是正确的,但我很难给出绝对的例子

    为了灵活性,可以很容易地注册句柄并从队列中删除句柄。但这很方便。kevent真正的优点在于它可以与非文件句柄的事物相关联。我更喜欢这一点,而不是epoll解决方案,在epoll解决方案中,所有内容都必须是文件句柄——是的,这是unix的口号——但仍然有一些东西必须被侵入才能使用epoll

    kevents无需文件描述符,您可以专门监视文件读取、写入、属性更改、删除和重命名。进程出口、分叉、信号。马赫端口上的事件(不在bsd上)。计时器和用户事件

    使用回调处理程序从运行在多个线程上的单个API处理所有这些类型的事件非常方便

    所以这是对(1)的冗长回答

    至于(2),;我不太明白。我相信一个“触发器活动”将导致kevent和select在文件描述符都挂起的情况下跳闸

    一个越来越不相关的警告。OSX 10.5.x上的kevent不太可靠。一些预期的事件不受支持,并且存在一些bug,或者可能是勘误表,因为行为的文档是模糊的。比如。。。在某些情况下,在kevent上等待时关闭套接字/描述符可能不会触发kevent。从我所看到的kevent是OSX为Grand Central Dispatch提供的基础技术,它在10.6及更新版本中得到了改进