• 空知
    2019-06-02
    线程本地的连接会被窃取
    这个我觉得是因为 如果 Tl里面没有空闲的 会去 sharedList查找处于 Not_In_Use的连接 这个连接可能已经在其他TL里面存在了 所以就会出现线程T2从sharedList获取到了 T1存在TL里面存放的没有使用的连接这种情况

    作者回复: 厉害

    
     14
  • 拯救地球好累
    2019-08-10
    支持高性能并发的软件通常首先会关注整体的并发设计模式,并发设计模式将影响整个软件的设计架构,比如RateLimiter并非采用较为复杂的生产者消费者模式,而是用细粒度的互斥锁来实现令牌桶算法;Netty采用了Reactor模式而非阻塞的等待-通知机制的一些实现。对设计模式的考量应当根据实际需求先考虑线程分工,再从避免共享的模式考虑到一些无锁的模式,再到细粒度的锁控制,再到复杂的同步和互斥模式。
    从高性能队列和高性能数据连接池中,可以看到,性能的提高通常会从几方面着手(实际场景中应当测试优于猜测,再根据阿姆达尔定律从性能瓶颈处先着手):并发设计模式;内存分配算法;缓存利用率;GC情况(有GC的语言);数据结构与算法的效率等。

    作者回复: 👍

    
     9
  • 阿健
    2019-06-01
    同问,为什么说线程本地的连接会被窃取呢?
     1
     8
  • 晓杰
    2019-06-02
    同问为什么线程本地的会被其他线程窃取,麻烦老师解释一下

    作者回复: sharedlist和其他线程的threadlocal里有可能都有同一个连接,从前者取到连接,就相当于窃取了后者

    
     5
  • 沙漠里的骆驼
    2019-06-02
    窃取是在获取本地链接失败时,遍历sharelist实现的
    
     4
  • 峰
    2019-06-01
    想了半天感觉ConcurrentBag应该是池化的一种通用性优化,但好像会有饥饿问题,如果某些线程总是占用连接,那么某些不经常占用连接的就可能一直拿不到连接,硬想的一个缺点,哈哈哈。
    
     2
  • 银时空de梦
    2019-06-02
    最后数据库连接都到线程本地池中了
     1
     1
  • 张德
    2019-06-02
    强烈建议老师再讲一期

    作者回复: 呵呵😄

    
     1
  • cricket1981
    2019-06-02
    可以用栈stack来代替list实现逆序关闭S6~S1吗?
     2
     1
  • 往事随风,顺其自然
    2019-12-08
    bagEntry.setState(STATE_NOT_IN_USE);requilte方法里面写的有点问题吧,这个之前已经设置状态,后面for循环里面判断不等于未使用状态,这个多此一举
    
    
  • DFighting
    2019-10-16
    注意到了requite()的一个细节优化,自己使用完了线程后并不是直接交还给线程池,而是先问下有没有其他线程等待,如果有,那么直接分配就好,这里就减少了一个线程上下文切换带来的损失。不过这里的threadList应该只是会使用线程池的连接,不可以在这个连接上做一些自己数据的存储,因为如果这样就会给每次连接的归还时执行一次清洗工作,想来也会是一次性能的浪费吧。老师,关于连接池源码怎么看啊,像实践下今天课堂上学到的内容,但是不只如何下手

    作者回复: 先了解实现原理,然后写一个最简单的程序,调试跟代码。

    
    
  • neohope
    2019-08-18
    老师,您好,下面这一段没有看懂:
    else if ((i & 0xff) == 0xff) {
          parkNanos(MICROSECONDS.toNanos(10));
     }
    为什么需要这样一段呢?
    
    
  • 业余草
    2019-07-28
    看不上眼的优化,居然带来了巨大的性能提升。
    
    
  • 老王的老李头
    2019-06-14
    faststatementlist
    
    
  • Geek_89bbab
    2019-06-13
    threadList里面的连接可能也会存在于多个threadList,但是概率相对较小;threadList的连接的remove操作都由本线程来执行,窃取的线程只会把标识设置为已使用,而不会将其从对应的那个threadList移除。可能是为了避免多线程操作同一个队列,而影响性能。所以把移除threadList里的连接的任务交给对应的那个线程。
    
    
  • QQ怪
    2019-06-03
    根本看不够,强烈建议老师再来一篇

    作者回复: 我觉得可以开心地笑一下,然后,就没然后了😂😂😂

    
    
  • gogo
    2019-06-02
    老师, 我看文中提到的是调用requite()释放链接的时候将这个链接添加到本地存储中。
    那我想问,如果不是调用requite()方法释放连接的情况下,这个连接第一次被放入threadlocal是什么时候啊? 是第一次获取连接的时候吗?

    作者回复: 只有requite的时候会放到threatlocal里

    
    
  • 张三
    2019-06-02
    打卡!
    
    
  • 龙猫
    2019-06-02
    需要多看几遍
    
    
  • 苏志辉
    2019-06-01
    这样会不会导致每个线程持有50个以下链接,而且每个链接可能在多个线程共存
    
    
我们在线,来聊聊吧