Filewatcher是否被认为是Java中的非阻塞IO?

时间:2016-04-25 03:37:29

标签: java nio nonblocking

这是FileWatcher java 7 nio库的代码片段。 它是非阻塞代码吗?该线程等待来自FileSystem的信号。

if self.loginButton.backgroundColor == UIColor.blackColor() {
            let tittle = NSAttributedString(string: "Login", attributes: [NSForegroundColorAttributeName: UIColor.blackColor()])
            loginButton.setAttributedTitle(tittle, forState: .Normal)
            loginButton.backgroundColor = UIColor.whiteColor()
        } else {
            let tittle = NSAttributedString(string: "Login", attributes: [NSForegroundColorAttributeName: UIColor.whiteColor()])
            loginButton.setAttributedTitle(tittle, forState: .Normal)
            loginButton.backgroundColor = UIColor.blackColor()
        }

1 个答案:

答案 0 :(得分:1)

Filewatcher使用EPOLL这是一个Linux系统调用。它是一种基于事件的多路复用机制。对于Windows,SELECT执行相同的操作,但效率低得多,而且在BSD(OSX所基于的)中有KQUEUE

简单来说,它的作用是在系统中注册一个等待事件发生的事件处理程序。随着时间的推移,系统会查看所有排队的事件处理程序,并查看是否有一个已准备好继续处理。如果有一个事件处理程序将其事件标志设置为true,那么它将处理该事件。如果没有事件,它将一直循环,直到找到发生的事件。

与此同时,main中的代码继续运行,从而为您提供其承诺的“非阻塞”功能。

这不是新技术,虽然ASYNC最近因NodeJS,Swift和其他非阻塞语言/框架的兴起而变得非常受欢迎,但同样的事情是WIN32 API如何工作 - 简而言之,它基于所有事件

您可以查看此link以获得更深入的解释。