谁能给我解释一下什么是事件驱动、异步、非阻塞I/O
Can someone explain to me what is an event-driven, asynchronous, non-blocking I/O
我正在尝试理解这些概念
- 事件驱动
- 异步
- 非阻塞I/O
假设您使用此伪代码从套接字读取数据
void processIO(socket)
{
data = socket.read();
doSomething(data);
}
阻塞模式下使用read方法。这意味着在读取数据之前它不会继续。 运行ning 上的线程被阻塞,直到读取数据后才会继续。 doSomething 只有在读取数据后才会被调用。如果您在应用程序的主线程上执行此操作,它可能无法更新其 UI 并且在收到数据之前会像冻结一样。
async void processIO(socket)
{
data = await socket.readAsync();
doSomething(data);
}
这个函数是异步的,它本身调用一个异步的 readAsync() 方法。
这样this运行s所在的线程就不会被阻塞。它在 await 语句处被中断,并且可用于您应用程序中的其他内容 运行。读取数据后,它会在 await 语句之后恢复并继续对数据执行某些操作。
这是进行非阻塞数据处理的一种方法,但它不是事件驱动的。
void setupRead(socket)
{
socket.on_data(do_something);
}
void do_something(data)
{
// process data
}
void main()
{
socket = new Socket(111)
setupRead(socket)
while (true) {
processEvents()
}
}
最后一个示例演示了事件驱动的 IO。您在某些资源上注册回调,以便在某些数据到达时调用。与此同时,您的代码可能会做其他事情或什么都不做。这是一种非阻塞、异步和事件驱动的方法。 UI 得到刷新,应用程序可以做任何它需要做的事情。
事件驱动,意味着您设置事件回调并等待事件发生。
异步意味着,您在等待时做其他事情,例如刷新 UI、处理用户输入或从其他资源读写。
非阻塞意味着开始监听的线程在事件到达之前不会被阻塞,它会做任何其他事情。比如同时处理其他事件。
我正在尝试理解这些概念
- 事件驱动
- 异步
- 非阻塞I/O
假设您使用此伪代码从套接字读取数据
void processIO(socket)
{
data = socket.read();
doSomething(data);
}
阻塞模式下使用read方法。这意味着在读取数据之前它不会继续。 运行ning 上的线程被阻塞,直到读取数据后才会继续。 doSomething 只有在读取数据后才会被调用。如果您在应用程序的主线程上执行此操作,它可能无法更新其 UI 并且在收到数据之前会像冻结一样。
async void processIO(socket)
{
data = await socket.readAsync();
doSomething(data);
}
这个函数是异步的,它本身调用一个异步的 readAsync() 方法。 这样this运行s所在的线程就不会被阻塞。它在 await 语句处被中断,并且可用于您应用程序中的其他内容 运行。读取数据后,它会在 await 语句之后恢复并继续对数据执行某些操作。 这是进行非阻塞数据处理的一种方法,但它不是事件驱动的。
void setupRead(socket)
{
socket.on_data(do_something);
}
void do_something(data)
{
// process data
}
void main()
{
socket = new Socket(111)
setupRead(socket)
while (true) {
processEvents()
}
}
最后一个示例演示了事件驱动的 IO。您在某些资源上注册回调,以便在某些数据到达时调用。与此同时,您的代码可能会做其他事情或什么都不做。这是一种非阻塞、异步和事件驱动的方法。 UI 得到刷新,应用程序可以做任何它需要做的事情。
事件驱动,意味着您设置事件回调并等待事件发生。 异步意味着,您在等待时做其他事情,例如刷新 UI、处理用户输入或从其他资源读写。
非阻塞意味着开始监听的线程在事件到达之前不会被阻塞,它会做任何其他事情。比如同时处理其他事件。