为什么异步I / O需要事件循环

免费版

我已经做了很多的发展在C#/。Net和异步的故事一直存在,从每天一(诚然API的已超过从开始/结束事件的年显著改变,以Task<T>async/ await)。在过去大约一年的时间里,我一直在使用Node.js进行开发,该工具异步执行所有I / O,并使用单线程事件循环模型。最近,我在一个正在使用Ruby的项目上工作,对于应用程序的一部分,我感到异步发出一大堆Web请求是很有意义的,并且感到惊讶的是,发现Ruby中的异步故事非常广泛不同。执行任何异步I / O的唯一方法是使用EventMachine

我的问题归结为:为什么在.Net中(而且据我所知Java和JVM也是如此)不需要事件循环,并且我可以随时触发异步请求,但是在像Ruby / Python这样的语言中,我需要分别使用eventmachine / twisted吗?我感觉异步I / O的工作原理有些根本不了解的事情。

鼻塞

我的问题归结为:为什么在.Net中(而且据我所知Java和JVM也是如此)不需要事件循环,并且我可以随时触发异步请求,但是在像Ruby / Python这样的语言中,我需要分别使用eventmachine / twisted吗?

我认为这是因为Ruby / Python(以及无缝的Node.js)希望通过为应用程序的核心循环强加单线程模型来简化开发人员的生活。使用事件机,异步I / O例程的完成回调将被序列化并排队在同一线程上执行,因此开发人员不必担心线程安全。

我不能说Java,但是在.NET中,我们可以通过同步上下文对此进行控制检查Stephen Cleary的“全部与SynchronizationContext有关”在.NET中复制事件机器的概念非常容易(实际上,这对于UI应用程序是自动完成的)。序列化同步上下文的自定义实现可能类似于AsyncPumpStephen Toub的“ Await,SynchronizationContext和Console Apps”IMO,这将是Ruby事件机器的直接匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么异步I / O需要缓冲?

来自分类Dev

异步I / O密集型代码的运行速度比非异步慢,为什么?

来自分类Dev

为什么异步事件循环在Windows上会抑制KeyboardInterrupt?

来自分类Dev

为什么异步方法需要返回未来?

来自分类Dev

为什么需要使此方法异步?

来自分类Dev

当异步事件循环运行时,为什么不能捕获SIGINT?

来自分类Dev

为什么需要异步调用数据库?

来自分类Dev

为什么递归异步函数在Rust中需要'静态参数?

来自分类Dev

为什么Jest需要Babel来测试异步代码?

来自分类Dev

为什么异步方法中的while循环不会停止?

来自分类Dev

为什么包含异步lambda的方法本身不需要是异步的?

来自分类Dev

需要事件目标与元素相同的Aurelia`click`属性

来自分类Dev

为什么点击事件需要onBackpressure()?

来自分类Dev

监视异步事件循环

来自分类Dev

异步串行通信:为什么ReadFile()在OVERLAPPED结构中设置事件?

来自分类Dev

为什么分配异步等待事件处理程序不会引起任何问题?

来自分类Dev

如果需要等待,为什么回调被认为是异步的

来自分类Dev

为什么我们需要异步同步原语,何时使用它们?

来自分类Dev

如果需要等待,为什么回调被认为是异步的

来自分类Dev

为什么需要使用 await 关键字来调用异步方法

来自分类Dev

为什么从服务器获取数据时需要使用异步?

来自分类Dev

为什么需要使用 promise 作为异步回调的包装器

来自分类Dev

永远运行异步事件循环的pythonic方法是什么?

来自分类Dev

为什么在for循环中异步处理不会缩短执行时间?

来自分类Dev

为什么IE对象需要循环?

来自分类Dev

为什么称为重叠I / O?

来自分类Dev

为什么I / O不间断?

来自分类Dev

为什么++ i在for循环之前不递增i?

来自分类Dev

为什么while循环会阻止事件循环?

Related 相关文章

  1. 1

    为什么异步I / O需要缓冲?

  2. 2

    异步I / O密集型代码的运行速度比非异步慢,为什么?

  3. 3

    为什么异步事件循环在Windows上会抑制KeyboardInterrupt?

  4. 4

    为什么异步方法需要返回未来?

  5. 5

    为什么需要使此方法异步?

  6. 6

    当异步事件循环运行时,为什么不能捕获SIGINT?

  7. 7

    为什么需要异步调用数据库?

  8. 8

    为什么递归异步函数在Rust中需要'静态参数?

  9. 9

    为什么Jest需要Babel来测试异步代码?

  10. 10

    为什么异步方法中的while循环不会停止?

  11. 11

    为什么包含异步lambda的方法本身不需要是异步的?

  12. 12

    需要事件目标与元素相同的Aurelia`click`属性

  13. 13

    为什么点击事件需要onBackpressure()?

  14. 14

    监视异步事件循环

  15. 15

    异步串行通信:为什么ReadFile()在OVERLAPPED结构中设置事件?

  16. 16

    为什么分配异步等待事件处理程序不会引起任何问题?

  17. 17

    如果需要等待,为什么回调被认为是异步的

  18. 18

    为什么我们需要异步同步原语,何时使用它们?

  19. 19

    如果需要等待,为什么回调被认为是异步的

  20. 20

    为什么需要使用 await 关键字来调用异步方法

  21. 21

    为什么从服务器获取数据时需要使用异步?

  22. 22

    为什么需要使用 promise 作为异步回调的包装器

  23. 23

    永远运行异步事件循环的pythonic方法是什么?

  24. 24

    为什么在for循环中异步处理不会缩短执行时间?

  25. 25

    为什么IE对象需要循环?

  26. 26

    为什么称为重叠I / O?

  27. 27

    为什么I / O不间断?

  28. 28

    为什么++ i在for循环之前不递增i?

  29. 29

    为什么while循环会阻止事件循环?

热门标签

归档