![]() |
1
4
好吧,这里有很多东西要拆。首先,让我们讨论一下您的特定代码示例。正确的写作方法
如果编译并启动它,可以打开多个浏览器选项卡:
这里不需要任何回调,也不需要主线程“等待”结果。Scotty分叉处理每个请求的线程可以执行所需的任何计算或IO活动,然后直接将响应返回给客户端,而不会影响任何其他线程。
更重要的是,除非你用
第二,斯科蒂其实没什么特别的。您应该将Haskell运行时看作是在OS线程机制之上提供了一个线程抽象层,而OS线程是一个不必担心的实现细节(好吧,除了在异常情况下,例如,如果您正在与需要在某些操作系统线程中发生某些事情的外部库交互。 因此,所有Haskell线程,甚至是“主”线程,都是绿色的,并且运行在一种虚拟机上,这种虚拟机在一个OS线程上运行得很好,不管有多少绿色线程由于什么原因阻塞。
注意这里不需要回拨。这个
Scotty基本上是围绕这个模式构建的,因此它自动分派多个请求,而不需要回调或阻塞OS线程。 |
![]() |
141592653 · GHCi未推断某些IO操作的实例 6 月前 |
![]() |
Enlico · 运行monad变压器堆产生的任何东西都不是==无? 6 月前 |
![]() |
The Oddler · TVar会阻止读取直到更改吗? 11 月前 |
![]() |
user20102550 · 如何在解析器中使用输入字符串 1 年前 |
![]() |
kesarling · 这个Haskell列表理解是如何评估的? 1 年前 |