多线程知识-java

RPC---->线程模型优化

   ---->java5引入锁机制   

        普通锁对象、读写锁对象。

   ---->java5的线程通讯机制

   ---->java5直接提供了线程池

           ---->最早的方式我们是每连接每线程

  ---->Reactor模式是一个线程可以处理多个连接

      不需要做并发控制,简化了实现

      不能充分利用CPU的优势,因为只有一个线程,

      该线程需要执行所有的操作:accept,read,decode,compute,encode,send

      实际中decode,encode,compute如果很耗时,则该线程就不能及时

      响应其它客户的请求

  ---->Reactor的多线程模式

       也不可能无线的创建线程

还是要用线程池控制

           ---->要求大家熟练java5线程池的操作。

  ---->难点:线程池的大小到底应该设置为多少。

       公式:线程池中的线程数量=(线程总时间/瓶颈资源时间)*瓶颈资源的线程并行数

    如果线程数少了,QPS减少,CPU使用率不够

    如果线程数多了,线程本身的资源消耗,CPU压力变大。QPS也会降低。

案例:有这样一个模块:

     线程同步锁(数据库的事务锁) 50ms

     cpu时间 18ms

     查询数据库,网络IO 80MS

     解析结果2ms,如果服务器有两个CPU,这个模块多少线程合适

     如果CPU是瓶颈资源

         线程数=(18+2+50+80)/20 * 2 = 15

     如果数据库的事务锁是瓶颈资源

         线程数=(50+18+2+80)/50 * 1 = 3;

   ---->CallAble和Future

   ---->java5线程中提供了阻塞队列的操作。

   ---->java5中提供了丰富的同步工具

   ---->java5提供了更丰富的性能更好的集合类

   ---->那么如何在Reactor中使用多线程的方式。

         

猜你喜欢

转载自394498036.iteye.com/blog/2359073