登录

java - pthreads是PHP多线程的东西。。我有一个奇葩的问题需要问和讨论

比如说JAVA吧!JAVA是有多线程的。
既然有了多线程,为什么还需要队列这个东西呢?
比如发邮件吧!
直接新开一个线程发邮件不就行了。为什么要放到(异步)队列里面呢?

# Java
巴扎黑巴扎黑2194 天前577 次浏览

全部回复(7) 我要回复

  • 高洛峰

    高洛峰2017-04-17 12:00:11

    线程有瓶颈,队列可以先屯着慢慢处理。

    回复
    0
  • 黄舟

    黄舟2017-04-17 12:00:11

    简单举个例子,这时候你有一批任务,但是特点如下:
    1. 执行时间长
    2. 不关心执行结果

    如果来一大批诸如此类的任务,你如果选择多线程(也就是一个任务开启一条线程)。那么CPU最终会因为线程数目过多,而“忙死”于上下文切换里。
    由于不关心执行结果,你就可以把任务全部放进队列里,用一个线程池去执行,比如同一时间只执行4个任务,那么你的全局就只有4条线程,上下文切换快,任务也有序地执行完。只是某种程度上效率可能不如多线程的快。

    这种不同可以参照下tomcat 或者apache httpd与 nginx或者node的不同。

    回复
    0
  • PHP中文网

    PHP中文网2017-04-17 12:00:11

    为了缓冲,比如你提交的请求并不是平稳的时候,可以通过队列有一个缓冲,这样数据可以被先积压到队列中

    回复
    0
  • 迷茫

    迷茫2017-04-17 12:00:11

    多线程与队列不是一回事情
    多线程是不稳定的。

    回复
    0
  • 大家讲道理

    大家讲道理2017-04-17 12:00:11

    线程

    需要考虑内存安全的问题, 调度等诸多问题, 相对来说更不可控.

    队列

    执行频度, 次序都是在可控范围内的, 太适合作缓冲区了~

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 12:00:11

    等你需要在内存里放几十个g的数据的时候,你就知道了

    回复
    0
  • 高洛峰

    高洛峰2017-04-17 12:00:11

    你学操作系统的时候,是不是学了一个生产者消费者模式,生产者产生产品放入队列,消费者从队列中读取数据进行消费。为啥把生产和消费这两个动作放到两个线程中呢?明白这个道理,就明白为啥用队列了。

    回复
    0
  • 取消回复发送