84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
比如说JAVA吧!JAVA是有多线程的。 既然有了多线程,为什么还需要队列这个东西呢? 比如发邮件吧! 直接新开一个线程发邮件不就行了。为什么要放到(异步)队列里面呢?
线程有瓶颈,队列可以先屯着慢慢处理。
简单举个例子,这时候你有一批任务,但是特点如下: 1. 执行时间长 2. 不关心执行结果
如果来一大批诸如此类的任务,你如果选择多线程(也就是一个任务开启一条线程)。那么CPU最终会因为线程数目过多,而“忙死”于上下文切换里。 由于不关心执行结果,你就可以把任务全部放进队列里,用一个线程池去执行,比如同一时间只执行4个任务,那么你的全局就只有4条线程,上下文切换快,任务也有序地执行完。只是某种程度上效率可能不如多线程的快。
这种不同可以参照下tomcat 或者apache httpd与 nginx或者node的不同。
为了缓冲,比如你提交的请求并不是平稳的时候,可以通过队列有一个缓冲,这样数据可以被先积压到队列中
多线程与队列不是一回事情 多线程是不稳定的。
线程
需要考虑内存安全的问题, 调度等诸多问题, 相对来说更不可控.
队列
执行频度, 次序都是在可控范围内的, 太适合作缓冲区了~
等你需要在内存里放几十个g的数据的时候,你就知道了
你学操作系统的时候,是不是学了一个生产者消费者模式,生产者产生产品放入队列,消费者从队列中读取数据进行消费。为啥把生产和消费这两个动作放到两个线程中呢?明白这个道理,就明白为啥用队列了。
线程有瓶颈,队列可以先屯着慢慢处理。
简单举个例子,这时候你有一批任务,但是特点如下:
1. 执行时间长
2. 不关心执行结果
如果来一大批诸如此类的任务,你如果选择多线程(也就是一个任务开启一条线程)。那么CPU最终会因为线程数目过多,而“忙死”于上下文切换里。
由于不关心执行结果,你就可以把任务全部放进队列里,用一个线程池去执行,比如同一时间只执行4个任务,那么你的全局就只有4条线程,上下文切换快,任务也有序地执行完。只是某种程度上效率可能不如多线程的快。
这种不同可以参照下tomcat 或者apache httpd与 nginx或者node的不同。
为了缓冲,比如你提交的请求并不是平稳的时候,可以通过队列有一个缓冲,这样数据可以被先积压到队列中
多线程与队列不是一回事情
多线程是不稳定的。
需要考虑内存安全的问题, 调度等诸多问题, 相对来说更不可控.
执行频度, 次序都是在可控范围内的, 太适合作缓冲区了~
等你需要在内存里放几十个g的数据的时候,你就知道了
你学操作系统的时候,是不是学了一个生产者消费者模式,生产者产生产品放入队列,消费者从队列中读取数据进行消费。为啥把生产和消费这两个动作放到两个线程中呢?明白这个道理,就明白为啥用队列了。