我在网络编程方面不是很有经验,我还没有在Node.js中编写任何东西,只是对事件驱动的方法感到好奇.看起来确实不错.
本文解释了当我们使用基于线程的方法处理请求时可能发生的一些不好的事情,并且应该选择事件驱动的方法.在基于线程的情况下,收银员/线程一直困扰着我们,直到我们的食物/资源准备就绪.在事件驱动下,收银员将我们送到请求队列之外的某个地方,这样我们就不会在等待食物时阻止其他请求.要扩展基于阻塞线程,需要增加线程数.对我而言,这似乎是一个不正确使用线程/线程池的错误借口.
难道不能使用IHttpAsyncHandler正确处理?ASP.Net接收请求,使用ThreadPool并运行处理程序(BeginProcessRequest),然后在其中我们使用回调加载文件/数据库.那个线程应该可以自由处理其他请求.文件读取完成后,再次调用ThreadPool并执行剩余的响应.对我来说没有那么不同,那为什么不那么可扩展呢?
我所知道的基于线程的缺点之一是,使用线程需要更多内存.但只有这些,您才能享受多核的好处.我怀疑Node.js根本没有使用任何线程/核心.
因此,基于事件驱动vs基于线程(不要带"因为它是Javascript和每个浏览器..."的论点),有人可以指出我使用Node.js而不是使用Node.js的实际好处是什么现有技术?
这是一个很长的问题.谢谢 :)
嗨,
我有使用泛型和可空的代码:
// The first one is for class
public static TResult With<TInput, TResult>(this TInput o,
Func<TInput, TResult> evaluator)
where TResult : class
where TInput : class
// The second one is for struct (Nullable)
public static TResult With<TInput, TResult>(this Nullable<TInput> o,
Func<TInput, TResult> evaluator)
where TResult : class
where TInput : struct
Run Code Online (Sandbox Code Playgroud)
请注意TInput约束,一个是类,另一个是struct.然后我用它们:
string s;
int? i;
// ...
s.With(o => "");
i.With(o => ""); // Ambiguos method
Run Code Online (Sandbox Code Playgroud)
它会导致Ambiguos错误.但我还有另一对:
public static TResult Return<TInput, TResult>(this TInput o,
Func<TInput, TResult> evaluator, …Run Code Online (Sandbox Code Playgroud)