【发布时间】:2012-02-13 17:12:03
【问题描述】:
我对使用单线程执行异步 IO 的“事件循环”这一主题进行了大量研究。我的理解是,例如,nodeJS 代码在单线程环境中运行,但确实在幕后将作业传递给并行线程。这意味着除了代码和解释器之外的所有东西都是同时运行的,它只是以单线程方式传递作业并管理回调。
我的问题是关于 Windows 中的 IO 和 ThreadPool 线程,特别是文件 IO 和数据库读/写。通常在使用多线程的 .NET 环境中,您可能会看到:
lock(sync)
{
// do some IO
}
为了保护某些函数免受并发问题的影响,例如两个线程试图将记录保存到同一个 sql 表或文件中。
我的问题有两个,
1) 当 nodeJS 说它执行“异步 IO”时,这是否意味着它实际上并发写入数据库或文件?我认为这取决于底层设备/操作系统,而不是 nodeJS,但我想澄清一下。
2) 如果某些 IO 操作必须或至少 应该 是原子的(不能同时完成),那么“异步 IO”有什么帮助?如果您最终不得不 lock() 很多这些操作,那么生成线程来执行 IO 会不会很浪费?
【问题讨论】:
标签: c# .net multithreading node.js threadpool