暑期实习——蚂蚁
1、java的同步异步;串行并行、阻塞非阻塞
同步 :多个线程访问共享资源时,同一时间只有一个线程能执行。如使用 synchronized 关键字修饰方法或代码块,线程在执行时会锁定共享资源,其他线程需等待当前线程释放锁才能执行。异步 :允许调用方在调用目标方法后不等待其执行完成,可继续执行其他操作。通常通过回调函数、事件监听或 Future 等方式实现,提高程序执行效率,常用于耗时操作,如网络请求、文件读写等,避免阻塞主线程。
串行 :任务按顺序依次执行,前一个任务完成后,下一个任务才开始。资源消耗少,但执行效率低,适用于任务间有严格依赖关系的场景。并行 :多个任务同时执行,充分利用多核 CPU 资源,提高执行效率。实现方式包括创建多个线程、使用线程池、借助 ForkJoinPool 等,适用于大量独立任务的处理。
阻塞 :线程在等待某个事件发生时处于阻塞状态,不能执行其他操作。如等待锁、等待 I/O 操作完成等,可能导致系统资源浪费。非阻塞 :线程在等待事件时不会一直等待,而是会主动进行其他操作或定期检查事件是否发生。如使用非阻塞 I/O,线程可在等待数据到来时处理其他请求,提高系统吞吐量。
2、线程池
3、tcp的拥塞控制
TCP 拥塞控制是一个动态的过程,用于防止网络出现过载。主要算法包括慢启动、拥塞避免、快重传和快恢复。慢启动阶段,发送方每次收到接收方的确认(ACK)后,拥塞窗口(cwnd)加倍增长,快速增大发送速率;当 cwnd 达到慢启动阈值(ssthresh)后,进入拥塞避免阶段,cwnd 按线性增长;若出现丢包,首次执行快重传,立即重传丢失的报文段,然后执行快恢复,将 ssthresh 减半,并将 cwnd 设置为 ssthresh,以避免网络拥塞进一步恶化。
4、操作系统的锁
自旋锁 :线程在获取锁时会一直循环等待,不释放 CPU,适用于锁保持时间短的场景,可减少线程切换的开销,但可能导致 CPU 资源浪费。互斥锁 :一种保证同一时刻只有一个线程访问共享资源的锁机制。线程获取锁后可访问资源,访问完成后释放锁;其他线程需等待锁释放才能获取锁,确保共享资源的互斥访问,避免数据不一致问题,但锁的获取和释放会增加系统开销。
5、pv操作
PV 操作是操作系统中用于进程同步和互斥的一组原语操作。P 操作(wait)用于申请资源,当资源不足时,进程进入等待状态;V 操作(signal)用于释放资源,唤醒等待的进程。PV 操作通过信号量来实现,信号量是一个整型变量,用于表示可用资源的数量。PV 操作在多进程或多线程环境下,可有效解决进程间的同步和互斥问题,如在生产者 - 消费者问题中,通过 PV 操作实现生产者和消费者对缓冲区的正确访问,避免数据丢失或覆盖等问题。