gpt4 book ai didi

sockets - Haskell与操作系统进行交互(中断)

转载 作者:行者123 更新时间:2023-12-03 11:57:10 28 4
gpt4 key购买 nike

我的问题是Haskell如何与系统交互。
例如,IO如何发生?

我对IO monad不感兴趣。或者如何使Haskell打印字符串或读取文件。
我对Haskell和底层操作系统之间的层(如果是这样的话)感兴趣。 Haskell本身(不是我)如何将任何内容打印到控制台?它如何与操作系统交互?

例如,在Python中,我可以执行任何系统命令。我可以让它执行echo message

真正变得重要的地方是理解套接字的工作方式,以及如何确保在获得新的连接时程序被中断。

在python中,一种方法是使用操作系统中的epoll(我相信只是接管了python进程的控制权)。

编辑:正如@Daniel Wagner所建议的,让我让这个问题更具体。
我目前没有遇到任何问题,理论上我只是好奇。
所以让我问你这个:
Haskell如何处理Linux上套接字产生的中断?

编辑:并使其更容易理解我在寻找什么答案:
-Haskell遇到中断时,会不会在其轨迹上停滞不前?
-是否可以保证在完成旧的连接之前就可以应答新的连接?
-如何获得中断?

最佳答案

Haskell没有指定。正如GHC实现的那样,我认为有一个IO经理,我相信它会在后台使用epoll。但是,所有这些都隐藏在抽象层的后面,因此您不必担心它-只需生成一些线程并将它们阻塞在您想读取的任何套接字上即可。另请参见“How can I watch multiple files/socket to become readable/writable in Haskell?”。

编辑以解决您的第二个问题:不,运行时不应在阻塞调用时停止运行(无论是线程运行时还是非线程运行时)。阻塞的线程将被存储起来,运行时将切换到准备执行的线程,就像您期望的那样。请注意,您必须使用GHC提供的调用才能实现此目的-手动使用FFI可以完全阻止非线程运行时。有关更多详细信息,请参见this blog post of mine(跳过gtk特有的“最佳实践”和“胆量”部分)。

关于sockets - Haskell与操作系统进行交互(中断),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23767835/

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