我理解Node.js的强大之处在于它处理一个单线程上的所有用户请求,该线程处理请求的队列。这个想法没有这个线程的上下文切换,没有系统调用。
输入线程---> |请求队列| --->输出线程 - (如果不引起系统调用则处理任务,否则委托给线程池)
线程池将: -
- 执行涉及系统调用的任务(通常有点长时间运行)
一个...例如IO任务)
- 将结果作为另一个请求任务放入队列中..
- 将由处理队列的单线程处理
我的问题是,不可避免的是,Node.js代码需要将数据放入RDBMS或JMS系统中。这绝对是同步的(即使JMS是同步的,尽管生产者 - 消费者不同步)。因此,处理这些IO任务的线程池不仅会进行系统调用,还会在此期间被阻止。 JDBC在任何情况下都不支持同步调用(我想由于需要是事务性的,并且可能是安全问题,因为txn和安全上下文附加到线程)。
那么我们如何从Node.js服务器中有效地将数据放入RDBMS中呢?