繁体   English   中英

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

[英]Haskell interacting with the OS (interrupts)

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

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

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

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

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

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

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

Haskell没有指定。 根据GHC的实施,我认为有一个IO管理器,我相信它会在后台使用epoll。 但是,所有这些都隐藏在抽象层的后面,因此您不必担心它-只需生成一些线程并将它们阻塞在您要读取的任何套接字上即可。 另请参见“ 如何在Haskell中观看多个文件/套接字变得可读/可写? ”。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM