【发布时间】:2011-09-13 19:04:31
【问题描述】:
从 node.js 的角度来看,所有代码都是非阻塞的。
在 Go 中,使用通道很容易实现非阻塞。
如果在 go 中编写一个 node.js 类型的服务器,让它成为非阻塞的有意义吗?例如,让数据库 connect() 函数返回一个通道,而不是在等待连接发生时阻塞。
对我来说,这似乎是正确的方法
但是……
【问题讨论】:
-
非阻塞异步IO优于阻塞IO。所以是的。
-
@raynos:我不知道这是不言而喻的。例如,在标准的 php/apache 设置中,在一个进程中被阻止仅仅意味着其他进程得到了它们的滴答声。在 node.js 中,非阻塞是必要的,因为它的 javascript 是单线程的。
-
@ccyoung 在 php/apache 中为每个连接创建一个低效的线程/进程。你需要这样做,因为你阻止了。如果你不阻止你减少这个开销。顺便说一句,php 也是单线程的,apache 产生多个 php 进程。如果 Node 想要缓慢/低效,它可以选择这样做。
-
@MattJoiner 阻塞调用使线程进入睡眠状态。那简直是浪费资源。线程不应该休眠,它们应该空闲。除了阻塞IO还有什么好处?
-
@cdunn2001 idle 表示他们正在等待更多任务。阻塞/休眠/等待意味着他们正在等待单个任务完成。基本上空闲意味着它什么都不做,但它可以在任何时间做任何事情。