课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都在学习计算机编程开发技术,而今天我们就一起来了解一下,软件开发线程模型应用注意事项。
效率问题代码复杂性问题
单线程单进程
服务无法充分利用服务器的核心,吞吐量不会随着负载的增加而增加,CPU的使用率不会超过10%。
简单且易理解的方式。
单线程多进程模型,为每个请求创建新的进程
创建进程的开销以及持续地创建和销毁大量数据库连接可能会增加延迟。
数据库连接应该是懒加载的,考虑使用OpCode缓存。
单线程多进程模型,请求重用worker进程
数据库会面临更多的连接,因为这些连接无法跨进程共享,打开过多的连接有可能会降低数据库的性能。
需要额外的代码来管理worker进程的生命周期。代码必须能够从失效连接中恢复,在处理每个请求时,静态变量应该要进行重置。
多线程单个长期存活的进程,每个请求有专门的线程
对于数据库和服务来说,跨线程的连接池方案是非常高效的;为每个请求都创建额外的线程将会限制并行处理的请求数量。
因为线程需要共享有状态的数据库连接,开发人员必须要识别和修正并发相关的缺陷,如死锁、活锁、线程饿死以及竞态条件等。
多线程单个长期存活的进程,不为每个请求创建专门的线程
对于数据库和服务来说,跨线程的连接池方案是非常高效的;异步操作会有很高的吞吐量。
I/O相关的任务必须要在单独的线程池中运行。如果必须要将结果返回给调用者的话,那么请求处理器需要等待线程池完成对请求的处理,得到结果。
在考虑采用哪种库和语言之前,软件架构师应该反思哪种线程模型能够适合其工程文化和能力。在代码复杂性和效率之间取得一个很好的平衡将会有助于理清这些困惑,在各种可行的技术栈之间做出选择时,也能有一个正确的方向。因为微服务的范围要比单体应用更小,为了实现更高的效率,可以在代码复杂性方面做出更多的努力。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。