为什么底层的io可以实现多路复用,而不是开多个线程来提高效率?
来源:9-6 Socket、IO模型、NIO面试专题-(1)

一起写代码2公众号
2021-05-22
线程里面有缓冲区,对于用户来说,可能读取的快一点。但是对于底层的io来说,一个请求过来,只有FD,读取文件是再操作系统中完成,操作系统进行将文件先读入内核,然后再复制到用户空间。(开多个线程取接收请求,本身任务不繁重,一个线程足以,因为仅拿着文件的FD给操作系统,让操作系统去读)。
但是为什么,操作系统将文件读取到内核后,用户要开多线程去接收呢?
这个不是很理解。我能理解的就是:1,用户开多个线程去接收操作系统返回的值,可以让操作系统有效利用cpu,而不会阻塞等着用户读。2,用户多开线程可以很好的利用缓冲。3,开多个线程可以处理多个任务。
这些目的除了高效利用cpu外,还为了什么目的?
写回答
1回答
-
求老仙
2021-06-07
用户开不应该开多个线程去接收,应该开单个线程处理很多个文件的I/O。这个叫做I/O多路复用,是操作系统底层API提供的能力。参考我对epoll模型的讲解。
10
相似问题