ReactiveX 与多线程编程有何不同
How is ReactiveX different from multithreaded programming
阅读有关 ReaactiveX 的文章(如 here),它是这样说的:
An advantage of this approach is that when you have a bunch of tasks that are not dependent on each
other, you can start them all at the same time rather than waiting for each one to finish before
starting the next one — that way, your entire bundle of tasks only takes as long to complete as the
longest task in the bundle.
我们不是都已经在使用多线程编程了吗?那么这两个东西到底有什么不同呢?
这是一个关于一般轻量级异步任务与线程的更广泛主题。
很大的不同在于成本和速度。线程很昂贵,操作系统通常会限制您可以创建的线程数。每个线程都有空间来放置整个堆栈,以备不时之需(如果还不够,您会得到一个 Whosebug)。如果线程多于处理器,那么切换任务意味着保存所有当前线程信息并将新线程加载到寄存器等。
ReactiveX 库与回调一起工作,因此唯一需要的内存是带有回调数据的对象。切换 ReactiveX 任务只是一个方法调用。
您可以同时处理数百万个 ReactiveX 任务,而不是线程。
大多数慢速任务(如文件或网络 IO)实际上需要大量等待。为什么分配整个线程只是等待?
使用 ReactiveX,任务只是等待的简单对象,只是排在队列中。
现在,ReactiveX 是建立在线程之上的。那些数百万个任务(只是内存中的回调对象)实际上 运行 在某个线程上 运行。而 ReactiveX,任务并不是真的同时“运行”(只有核心上的线程 运行 实际上可以做某事)。大多数任务都需要大量等待,因此实际上数以百万计的 ReactiveX 任务实际上只是在队列中同时“等待”。
另外,考虑像 Javascript 这样的场景,这是一个单线程环境。多线程在那里不是一个选项。即使您可以创建线程,当许多任务都在单个线程上管理时,避免并发或简化 UI 需要线程关联的代码也可能很好。
即使在多线程场景中,ReactiveX 也非常有用,因为它 API 保证特定流的同步事件回调,即使该流正在使用许多线程来生成数据。
阅读有关 ReaactiveX 的文章(如 here),它是这样说的:
An advantage of this approach is that when you have a bunch of tasks that are not dependent on each
other, you can start them all at the same time rather than waiting for each one to finish before
starting the next one — that way, your entire bundle of tasks only takes as long to complete as the
longest task in the bundle.
我们不是都已经在使用多线程编程了吗?那么这两个东西到底有什么不同呢?
这是一个关于一般轻量级异步任务与线程的更广泛主题。
很大的不同在于成本和速度。线程很昂贵,操作系统通常会限制您可以创建的线程数。每个线程都有空间来放置整个堆栈,以备不时之需(如果还不够,您会得到一个 Whosebug)。如果线程多于处理器,那么切换任务意味着保存所有当前线程信息并将新线程加载到寄存器等。
ReactiveX 库与回调一起工作,因此唯一需要的内存是带有回调数据的对象。切换 ReactiveX 任务只是一个方法调用。
您可以同时处理数百万个 ReactiveX 任务,而不是线程。
大多数慢速任务(如文件或网络 IO)实际上需要大量等待。为什么分配整个线程只是等待?
使用 ReactiveX,任务只是等待的简单对象,只是排在队列中。
现在,ReactiveX 是建立在线程之上的。那些数百万个任务(只是内存中的回调对象)实际上 运行 在某个线程上 运行。而 ReactiveX,任务并不是真的同时“运行”(只有核心上的线程 运行 实际上可以做某事)。大多数任务都需要大量等待,因此实际上数以百万计的 ReactiveX 任务实际上只是在队列中同时“等待”。
另外,考虑像 Javascript 这样的场景,这是一个单线程环境。多线程在那里不是一个选项。即使您可以创建线程,当许多任务都在单个线程上管理时,避免并发或简化 UI 需要线程关联的代码也可能很好。
即使在多线程场景中,ReactiveX 也非常有用,因为它 API 保证特定流的同步事件回调,即使该流正在使用许多线程来生成数据。