套接字读取以什么方式与文件读取不同?

时间:2017-06-23 22:59:46

标签: linux asynchronous linux-device-driver python-asyncio

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

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

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

套接字示例:

  

从协程读取套接字会产生数据,直到数据准备就绪。   准备意味着它实际上来自于一个非确定性的时间   在互联网上的某个地方。

为什么不读取文件:

  

从协程中读取文件,直到数据准备就绪。准备   意思是它实际上从某个地方到达了一个不确定的时间   从计算机的硬盘

  • 这是遗留代码的继承行为吗?阻止调用效果不错?

  • 与Character vs Block文件有关吗?

  • 字符设备文件怎么样,比如说代表UART连接的文件? no文件IO也会在这里应用吗?

1 个答案:

答案 0 :(得分:1)

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

  • 异步编程最初在网络系统/套接字中最有用。虽然很少有100k文件打开,并且想要异步读取所有文件,但聊天服务器(或其他处理大多数空闲连接的服务器)可能会有100k +这些连接。可以肯定的是,异步编程现在是一种“样式”,可以避免基于线程编程的许多问题,但这不是它开始的地方(虽然我有0证明这个陈述)。
  • 如果是文件,当一个人请求信息时,它应该很快到达某个时间点。也许这与执行HTTP请求相当,其中人们期望得到答案并且可能只是以同步方式等待它。另一方面,套接字可以仅针对推送消息打开,其中不期望消息何时到达(如果有的话)。对于某些特殊文件,这也可能是正确的,但我希望在这种情况下可以使用不同的异步消息,之后应该进行同步读取(例如iNotify用于普通文件,从不查看特殊文件)。 / LI>
  • 我认为,除非你知道自己在做什么,否则进行大规模并行文件访问实际上是一个非常糟糕的主意。套接字可能是有用的,因为您可能连接到不同的机器。做大规模并行文件IO,你可能希望操作系统为你串行化请求(你有没有尝试同时从CD ROM复制2个大文件;))?

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