
高性能组件
文章平均质量分 84
高性能组件,高频考点,面试难点
amanda39
这个作者很懒,什么都没留下…
展开
-
高性能组件(4)try-catch实现
本文主要讲try catch的实现。 面试微软会遇到。 try/catch/finally:调试,捕获,最终 try_catch用法: 比如: 连接数据库时有可能失败 try{ connect_spq(); //throw 抛出个异常 string.copy(); //函数内部抛出异常 } catch(){ //捕获异常 } finally(){ //不管你有没有走,这一步一定会走 } setjmp/longjmp函数: 1、可以跨越函数的跳跃,可从函数A跳到函数B; 2、调用longjmp函数执行完后,原创 2021-11-22 17:45:47 · 681 阅读 · 0 评论 -
高性能组件(2)锁与原子操作
本文主要介绍各种锁和原子操作。 背景: 多个线程任务执行时,不可避免的会共用些资源,这些资源就是临界资源 多线程使用临界资源时,会出现无可预料的情况,会有副作用的情况,所以给临界资源加上锁。 有什么副作用呢? 多个线程,对于同一个变量操作的时候 由于线程的切换,会导致汇编语言一个流程中,就切换到另一个线程走流程,第一个流程被终端了 这个就是副作用,就是两个线程执行却只实现了一个线程的结果。 理想中不同线程对idx++操作,应该是如下: 但实际大部分是这样: 为了汇编的流程不被切断,我们应该将其锁起来。原创 2021-11-19 20:55:54 · 288 阅读 · 0 评论 -
高性能组件(1)定时器-难点
本文将介绍服务器中经常使用的定时器方案: 业务场景: 什么时候用定时器? 1、心跳检测 2、游戏中的技能冷却 定时器的实现方式: 1、在nginx和redis当中,将网络事件和时间事件放在一个线程中处理: 通过epoll_Wait函数,设置最后参数timeout = 最近任务的时间 - 当前时间,即可实现定时器。在timeout时间内,线程会阻塞。时间到了,获取相关数据进行处理; // 第⼀种 while (!quit) { int now = get_now_time();// 单位:ms int t原创 2021-11-18 21:27:55 · 170 阅读 · 0 评论