线上服务CPU飙高的原因是什么?
1.死循环
2.频繁full GC
3.大量复杂的计算
4.频繁切换线程
5.死锁
6.正则匹配
7.同步大量文件
8.kafka的bug
异步比多线程复杂?这个结论也不知道怎么得到的?多线程再轻量,本质还是线程,死锁,竞争,同步这些问题该存在还是存在的。
C#程序员在做延时处理的时候,
你们是用Task.Delay()还是Thread.Sleep()?
Thread.Sleep()是同步延迟,会阻塞当前线程;Task.Delay()是异步延迟,不会阻塞线程;
Thread.Sleep()不能中途取消,Task.Delay()可以,delay有四个重载方法,需要取消的话,可以调用Delay(int millisecondsDelay, CancellationToken cancellationToken)这个方法;
#程序员# #编程# #IT#
#学习# #知识# #互联网#
为了避免线程间锁的竞争和同步,每个I/O线程都对应一个PoolThreadCache,负责当前线程使用非大内存的快速申请和释放。

• 当从PoolThreadCache中获取不到内存时,就从PoolArena的内存池中分配。当内存使用完并释放时,会将其放到PoolThreadCache中,方便下次使用。若从PoolArena的内存池中分配不到内存,则从堆内外内存中申请,申请到的内存叫PoolChunk。当内存块的大小默认为12MB时,会被放入PoolArea的内存池中,以便重复利用。当申请大内存时(超过了PoolChunk的默认内存大小12MB),直接在堆外或堆内内存中创建(不归PoolArea管理),用完后直接回收。
EventBus和AsyncEventBus使用区别
EventBus:同步事件总线
1.同步执行,事件发送方在发出事件之后,会等待所有的事件消费方执行完毕后,才会回来继续执行自己后面的代码。
2.事件发送方和事件消费方会在同一个线程中执行,消费方的执行线程取决于发送方。
3.同一个事件的多个订阅者,在接收到事件的顺序上面有不同。谁先注册到EventBus的,谁先执行,如果是在同一个类中的两个订阅者一起被注册到EventBus的情况,收到事件的顺序跟方法名有关。

AsyncEventBus:异步事件总线
1.异步执行,事件发送方异步发出事件,不会等待事件消费方是否收到,直接执行自己后面的代码。
2.在定义AsyncEventBus时,构造函数中会传入一个线程池。事件消费方收到异步事件时,消费方会从线程池中获取一个新的线程来执行自己的任务。
3.同一个事件的多个订阅者,它们的注册顺序跟接收到事件的顺序上没有任何联系,都会同时收到事件,并且都是在新的线程中,异步并发的执行自己的任务。
关于Guava EventBus事件总线、Spring框架中的事件监听机制、或者消息中间件等等来实现领域事件的发布订阅。访问《COLA 4.x和DDD项目实践精粹》技术专栏获取详细的技术实现细节和完整的示例代码。
JAVA基础:线程有哪些状态?
线程的状态:
NEW 尚未启动
RUNNABLE 正在执行中
BLOCKED 阻塞的(被同步锁或者IO锁阻塞)
WAITING 永久等待状态
TIMED_WAITING 等待指定的时间重新被唤醒的状态
TERMINATED 执行完成







