gpt4 book ai didi

multithreading - JDK 中的异步 NIO 是如何工作的?

转载 作者:行者123 更新时间:2023-12-03 13:02:01 25 4
gpt4 key购买 nike

在 JVM 中,线程只是原生操作系统线程的薄包装。并且 native 操作系统线程占用空间很大,创建它们/在它们之间切换并不是一项轻量级的任务。为了克服这个缺点,JDK 中引入了异步 NIO,它在任务等待时将线程返回到线程池。一旦任务结束,就会从线程池中提取另一个线程来执行任务。
系统怎么知道任务结束了?该任务可能正在等待来自 HTTP 服务器的响应。但是既然线程已经返回到线程池中,谁来中断CPU通知任务完成,可以继续工作呢?

最佳答案

线程不会返回到线程池。
如果您指的是选择器,那么您有一个可以服务多个连接的线程。这称为多路复用 IO,在 Linux 上,Linux epoll 系统位于底层。这个线程是你自己来控制的。
因此,您的线程在选择器上的某个事件循环中运行。如果没有任何准备就绪(例如可用于在套接字中读取的数据),它将等待,一旦数据进入,选择器将唤醒线程,然后线程可以处理准备好处理的每个选择键。这种方式一个线程可以同时处理一堆连接。
伪代码:

for(;;){
int count = selector.select();
if(count>0){
for(SelectionKey key: selector.getReadySet()){
process(key);
}
}
}
上面的循环是在你自己的线程中运行的。

关于multithreading - JDK 中的异步 NIO 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65490456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com