• Ax1an
    2018-12-02
    信号量不支持主动超时的解释,看了三遍还是没看懂,麻烦波波老师再详细解释一下,感谢!

    作者回复: 你可以使用信号量然后设超时(比如2秒),但调用的服务要花5秒,这个调用线程(容器线程)不能在2秒时主动超时,必然等5秒调用返回,hystrix会标记一次超时,因为你设了2秒超时(虽然实际服务调花5且是成功的)。线程池设2秒超时的话,下面的调用线程(hystrix线程池内线程)会在2秒时主动超时。

    
     2
  • NICK
    2019-02-18
    老师,为什么受信任服务的就用信号量?

    作者回复: 受信任服务一般是企业内部开发,性能不至太差,所以用信号量也OK。但是如果服务确实很慢,即使受信任,也要考虑线程池隔离,同时因为在企业内部,我们一般可以要求服务提供方改善性能。第三方的服务我们一般称为不受信,因为性能一般无法把控,可能很慢,我们一般也无法要求第三方改善性能。

    
    
  • 西兹兹
    2018-12-20
    为什么不以多个服务作为一个线程池?
    10个接口,开10个线程池, 核心活跃线程数开销会不会很大?
    还是每个接口的单个线程池设置核心线程数不大,然后通过线程等待队列的方式优化?

    作者回复: 一个线程管多个服务,就无法有效隔离,就会有干扰问题。一个服务一般不会同时调很多其它服务,调超>=10服务场景是很少的,即使有,10个线程池开销也不大。只有网关(或某些聚合服务)会大量调其它服务,这时不用线程池,而用信号量。

    
    
  • 魏红生
    2018-12-11
    你好,我现在遇到一个问题想请教下:
        每个服务单元设置一个线程池进行隔离限流,但是线程都没有回收一直hang住了,如:
    "hystrix-xxxservice-5" #1029 daemon prio=5 os_prio=0 tid=0x00007f5a9c235800 nid=0x402b waiting on condition [0x00007f5a87ce5000]
       java.lang.Thread.State: WAITING (parking)
            at sun.misc.Unsafe.park(Native Method)
            - parking to wait for <0x00000006c58491a0> (a java.util.concurrent.SynchronousQueue$TransferStack)
            at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
            at java.util.concurrent.SynchronousQueue$TransferStack.awaitFulfill(SynchronousQueue.java:458)
            at java.util.concurrent.SynchronousQueue$TransferStack.transfer(SynchronousQueue.java:362)
            at java.util.concurrent.SynchronousQueue.take(SynchronousQueue.java:924)
            at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1074)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1134)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)

     当是聚合服务(服务单元过多)的时候,这样的线程hang住很浪费资源,请问有办法解决吗?
     
    展开

    作者回复: 如果是聚合服务过多(一般在网关上),请使用信号量隔离,不要用线程池,否则会搞出很多线程池开销太大不可控。

    
    
  • breezeQian
    2018-10-28
    老师,信号量隔离不支持异步调用是什么意思?麻烦您有空解释下,😄

    作者回复: 建议看hystrix文档对semaphore信号量的解释,内部本质是同步阻塞机制,

    https://github.com/Netflix/Hystrix/wiki/How-it-Works

    Note: if a dependency is isolated with a semaphore and then becomes latent, the parent threads will remain blocked until the underlying network calls timeout.

    
    
  • 正是那朵玫瑰
    2018-10-23
    老师,想问下我看到线程池隔离的话是每个服务一个线程池,信号量隔离也是每个服务设置一个信号量吗?

    作者回复: 一般是以服务为单位进行隔离限流

    
    
我们在线,来聊聊吧