导语:同步、异步,并发、并行、串行,这些名词在我们的开发中会经常遇到,这里对异步编程做一个详细的归纳总结,希望可以对这方面的开发有一些帮助。
内容大纲:
1、几个名词的概念
多任务的时候,才会遇到的情况,如:同步、异步,并发、并行。
1.1 理清它们的基本概念
并发:多个任务在同一个时间段内同时执行,如果是单核心计算机,CPU会不断地切换任务来完成并发操作。
并行:多任务在同一个时刻同时执行,计算机需要有多核心,每个核心独立执行一个任务,多个任务同时执行,不需要切换。
同步: 多任务开始执行,任务A、B、C全部执行完成后才算是结束。
异步: 多任务开始执行,只需要主任务A执行完成就算结束,主任务执行的时候,可以同时执行异步任务B、C,主任务A可以不需要等待异步任务B、C的结果。
并发、并行,是逻辑结构的设计模式。
同步、异步,是逻辑调用方式。
串行是同步的一种实现,就是没有并发,所有任务一个一个执行完成。
并发、并行是异步的2种实现方式。
1.2 举一个例子
你的朋友在广州,但是有2辆小汽车在深圳,需要你帮忙把这2辆小汽车送到广州去。
同步的方式,你先开一辆小汽车到广州,然后再坐火车回深圳,再开另外一辆小汽车去广州。这是串行的方法,2辆车需要的时间也就更长了。
异步的方式,你开一辆小汽车从深圳去广州,同时请一个代驾把另外一辆小汽车从深圳开去广州。这也就是并行方法,两个人两辆车,可以同时行驶,速度很快。
并发的方式,你一个人,先开一辆车走500米,停车跑回来,再开另外一辆车前行1000米,停车再跑回来,循环从深圳往广州开。并发的方式,你可以把2辆车一块送到朋友手里,但是过程还是很辛苦的。
1.3 思考问题
你找一家汽车托运公司,把2辆车一起托运到广州。这种方式是同步、异步,并发、并行的哪种情况呢?
2、并发/并行执行会遇到的问题
2.1 问题1:并发的任务数量控制
假设:某个接口的并发请求会达到1万的qps,所以对接口的性能、响应时长都要求很高。
接口内部又有大量redis、mysql数据读写,程序中还有很多处理逻辑。如果接口内的所有逻辑处理、数据调用都是串行化,那么单个请求耗时可能会超过100ms,为了性能优化,就会把数据读取的部分与逻辑计算的部分分开来考虑和实现,能够独立的部分单独剥离出来作为异步任务来执行,这样就把串行化的耗时优化为并发执行,充分利用多核计算机的性能,减少单个接口请求的耗时。
资料领取直通车:大厂面试题锦集+视频教程
Linux服务器学习网站: