2

线程同步(线程同步和互斥)

线上服务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 执行完成

本文来自网络,不代表本站立场。转载请注明出处: https://tj.jiuquan.cc/a-2385665/
1
上一篇cmcc是什么(cmcc是什么网络有密码)
下一篇 自在二十文:熟悉的场景正回归:多地撤交通卡口

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: alzn66@foxmail.com

关注微信

微信扫一扫关注我们

返回顶部