io模型
单线程模型 accept函数如果没有事件,则会阻塞,影响其他请求 。。。。。 多进程模型 。。。。。 套接字 用网络地址和端口来唯一标识一个实体。那么,用来唯一标识通信两端的数据结构就叫做套接字 ...
单线程模型 accept函数如果没有事件,则会阻塞,影响其他请求 。。。。。 多进程模型 。。。。。 套接字 用网络地址和端口来唯一标识一个实体。那么,用来唯一标识通信两端的数据结构就叫做套接字 ...
java锁升级过程 前置知识:对象头中的markword(32字节)的最后两个字节用来表示锁的状态 无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁 (无法退化) 无锁状态 会被标志无锁状态,jvm启动4秒后会变为偏向锁状态(BiasedLockingStartupDelay jvm参数 默认4秒) 偏向锁,最后两个字节会标志为偏向锁,且还会有块内存区域标志着线程id的信息,下次线程过来时,直接将锁交出,当有竞争时,偏向锁会升级为轻量级锁 轻量级锁,采用的是cas操作,cas成功的线程获取到锁,其他的线程会自旋,等待锁释放,轻量级锁实现的过程是:线程的虚拟机栈中会创建一个lock record内存块用来保存对象头markword副本,对象头会记录lock record的地址,如果自旋线程数量超过一个,那么就会升级为重量级锁 重量级锁 jvm层面,使用monitor enter 和 monitor exist命令加锁,其他线程挂起
缓存一致性问题 什么是缓存一致性问题? 在JMM中,每个线程都拥有自己的工作内存(逻辑概念,也叫缓存),通过bus总线与内存交互,也就是说每个线程都有自己的工作内存,可以进行读,写操作。不同线程对同一数据进行读写,就会使工作内存之间和主内存的数据不一致的情况。这时候就需要操作系统制定相关规则来维持工作内存之间和主内存的数据的一致性。 ...
创建多少线程合适? 根据文章Java线程(中):创建多少线程才是合适的? 我总结了 为什么要使用多线程? 因为程序执行多任务时,可以执行的更快,快 取决于 延迟 ,吞吐量 。降低延迟,提高吞吐量 多线程的应用场景有哪些? io密集型:磁盘和内存打交道之类的操作 cpu密集型:复杂计算,几乎不操作磁盘,就是一个劲的计算 ...
线程通信-通知与等待 我们知道 在java中 线程的状态 有6种,初始(NEW),运行(runnable),阻塞(bloked),等待(waiting),超时等待(timed_waiting),终止(terminated) Object.wait() 使线程等待,释放锁,Object.notify(),Object.notifyAll() 唤醒等待的线程 ...