gpt4 book ai didi

linux - 套接字读取与文件读取有何不同?

转载 作者:太空狗 更新时间:2023-10-29 11:17:25 25 4
gpt4 key购买 nike

我只是打算重写一些 python 代码,我在其中轮询文件以进行更改。我想将其重写为 asyncio 的练习,概念上的想法是执行一个会产生的非阻塞文件读取。一旦数据可用,事件循环将继续协程执行。

然后我发现异步文件操作不是一个人做的事情。 ref.

但我不明白这种行为的动机是什么,以及为什么它与套接字有什么不同。

套接字示例:

Reading a socket yields from a coroutine until the data is ready. Ready meaning it actually arrived in an nondeterministic time from somewhere on the Internet.

为什么不也用于读取文件:

Reading a file yields from a coroutine until the data is ready. Ready meaning it actually arrived in an nondeterministic time from somewhere from the hard disk of the computer

  • 这是否是遗留代码的继承行为,可以很好地处理阻塞调用?

  • 这与字 rune 件与 block 文件有关吗?

  • 字符设备文件呢,比如表示 UART 连接的文件?无文件 IO 是否也适用于此?

最佳答案

绝对不是一个完整的答案,但有些想法太大而无法发表评论。

  • 异步编程最初在网络系统/套接字中最有用。虽然很少有人打开 10 万个文件,并希望异步读取所有这些文件,但聊天服务器(或其他处理大部分空闲连接的服务器)很可能有 10 万个以上的连接。可以肯定的是,异步编程现在是一种“风格”,它避免了基于线程编程的许多问题,但这并不是它开始的地方(尽管我对此说法的证据为 0)。
  • 在文件的情况下,当一个人请求信息时,它应该会在不久的将来到达。也许这与执行 HTTP 请求相当,在该请求中,人们期望得到答案并且可能只是以同步方式等待它。另一方面,可以只为推送消息打开一个套接字,其中不期望消息何时(如果有的话)到达。对于某些特殊文件,这也可能是正确的,但我希望在那种情况下可以使用不同的异步消息,之后应该进行同步读取(就像普通文件的 iNotify,从不查看特殊文件)。
  • 我认为,除非您知道自己在做什么,否则大规模并行进行文件访问实际上是一个非常糟糕的主意。套接字可能会很有用,因为您可能会连接到不同的机器。执行大规模并行文件 IO,您可能希望操作系统无论如何都为您序列化请求(您是否曾尝试同时从 CD ROM 复制 2 个大文件;))?

正如我所说,没有明确的答案,只是对这个问题的一些想法

关于linux - 套接字读取与文件读取有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44731010/

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