面试题答案
一键面试可能遇到的性能问题
- 资源耗尽:如果并发数量过高,可能会耗尽系统资源,如文件描述符、内存等,导致程序崩溃或性能急剧下降。
- 网络拥塞:过多的网络请求同时发送,可能会导致网络拥塞,使得每个请求的响应时间变长。
- 系统负载过高:大量并发任务会使CPU和内存的负载增加,影响系统整体性能。
性能优化方式
- 调整并发数量:通过设置合适的并发数,避免资源过度使用。可以根据系统资源情况(如CPU核心数、内存大小)和网络带宽来调整。
- 资源分配:合理分配资源,如为每个任务分配适当的内存空间,避免内存泄漏和过度占用。
优化后的代码示例
import asyncio
async def mock_network_request(delay):
await asyncio.sleep(delay)
return f"Request with delay {delay} completed"
async def main():
tasks = []
max_concurrency = 100 # 设置最大并发数
semaphore = asyncio.Semaphore(max_concurrency)
for i in range(1000):
async def task_wrapper(delay):
async with semaphore:
return await mock_network_request(delay)
task = asyncio.create_task(task_wrapper(i / 10))
tasks.append(task)
results = await asyncio.gather(*tasks)
for result in results:
print(result)
if __name__ == "__main__":
asyncio.run(main())
在上述代码中,使用asyncio.Semaphore
来限制并发数量为100,避免资源过度使用。每个异步任务在获取信号量后执行模拟的网络请求,完成后释放信号量,使得其他任务可以获取信号量并执行。这样可以有效控制并发数量,优化性能。