当前位置: 首页 > news >正文

程序员用来做笔记的网站软件开发的几个阶段

程序员用来做笔记的网站,软件开发的几个阶段,网站维护 网站建设属于什么,python建立简易网站这个话题在入行之前就想过很多次#xff0c;很多8古文或者你搜索的结果都是告诉你什么提高高并发或者是一些很高大上的话#xff0c;既没有案例也没有什么公式去证明#xff0c;但是面试中总是被问到#xff0c;也没有实战经历#xff0c;所以面试时一问到多线程的东西就无…这个话题在入行之前就想过很多次很多8古文或者你搜索的结果都是告诉你什么提高高并发或者是一些很高大上的话既没有案例也没有什么公式去证明但是面试中总是被问到也没有实战经历所以面试时一问到多线程的东西就无从下手接下来我就谈谈我的理解。 1.Java中为什么要使用多线程 多线程其实是在主线程中再开启一个线程去执行。 为什么要用呢 先不谈什么高并发这三个字太荒谬。从基本的作用开始说其实就是对于一个请求内的耗时操作另外开启一个新的异步线程不让耗时操作阻塞主线程这样主线程直接跳过耗时操作去往下面执行然后返回结果给前端提高了响应速度。 上案例,这个我们先看一下没有使用多线程的正常请求 Controller Service 很简单的东西我模拟testThread这个里面的东西是一个耗时操作让它睡了10秒也就是相当于一个耗时操作。正常请求的话前端肯定是得等10s以后才有响应就会显示一直加载 正常打印结果 也就是内容是自上而下依次执行的。 上面案例全是靠主线程自己执行的假如现在使用多线程就是对于10s耗时的testThread这个操作开启一个异步线程去执行会有什么效果此处暂时只加上一个注解就表示这个方法使用了多线程下面会介绍如何使用此处先知道就是开启了异步线程。 再来看看响应结果及其速度 结果表明它会先打印主线程的东西然后再打印开启的异步线程内的东西并且呢可能大家以为主线程提前返回了那个10s的耗时操作怎么办结束了吗其实并没有它只是在后台继续执行10s结束后打印的“66666666666666”但是我们提前结束了请求响应给了前端。这样前端就不用等很长时间才能拿到结果对吧。别说10s实际2s都太慢了但是这个耗时操作一般是什么呢例如发送邮件读取文件等等也可能是公司的具体业务并且这个耗时操作的结果不影响你下面继续执行的代码即你继续执行的代码不依赖于耗时操作的结果。 所以第一个用处就可总结为开启异步线程处理耗时操作提高请求的响应速度。 其次再谈谈下一个作用充分利用资源提高了CPU的利用率。什么意思呢我们知道CPU在同一时间内是支持多个线程同时执行的我们如果不使用多线程也就是主线程自己去完成所有操作一定会因为耗时操作阻塞主线程此时导致CPU空闲那利用率肯定不高嘛那我们如果使用异步线程去做那就是两个线程同时去完成一件事情多多少少是要比一个线程要快的而且我们充分利用了它的特性在同一时刻开启多个线程去执行。 所以第二个用户可总结为分利用资源提高了CPU的利用率 下面就说说提高高并发怎么回事上面两个我一开始就知道而且比较好理解但是高并发这个确实抽象但是好在下点功夫还是能理解的。高并发最多能同时处理的请求数量。我们知道那这个肯定是我们服务器的功能拿我们后端Tomcat来说支持最大线程数200最大并发量1000我就可好奇200个线程怎么处理1000请求的很离谱并且一个请求就耗费一个线程了实际上是1秒内有可能一个请求0.5s就结束了此时线程让出来了处理其他请求了。所以理想情况下在1s内还是有可能的但是为什么说使用多线程也可以呢因为这样的话首先Tomcat的线程可以理解为我们的主线程如何让主线程更快的释放出来然后让它去处理别的请求这才是我们关心的而我们多线程刚好就解决了这个困难首先我们自己去创建一个异步线程去处理耗时操作这个异步线程你想创建多少个都没关系跟Tomcat提供的那个主线程没关系不会占用它的那200个。这样我们就让耗时操作让我们的异步线程执行主线程就释放出来了这样就提高了整体的并发量。 上面所说的主线程就是main线程是由Tomcat提供的。而异步线程是jdk提供的。 所以第三可总结为提高系统的并发处理能力 2.多线程的创建 1.继承Thread 2.实现Runnabe接口 3.实现Callable接口 4.Executors.newFixedThreadPool 好的上面这个是标准的八股文但实际工作中不用123不用我说也肯定不使用已经有线程池了肯定使用线程池的池化思想。好处再帮各位回忆一下 1.减少频繁创建线程和销毁线程带来的额外开销线程池可以提前帮我们创建好这些线程。 2.避免一直创建线程造成OOM而线程池会把使用过的线程再使用避免重复创建线程。 .......还有一些自己下去可以会议下。   那上面我们都不用但是得知道因为面试造火箭这些先表明你都知道后面紧接着说实际工作中并不会使用上面的几种方式去创建多线程而是使用spirng给我们提供的ThreadPoolTaskExecutor或者是jdk提供的ThreadPoolExecutor一般还是用sping提供的毕竟现在项目都是spring家族的IOC这么好用必须得用上。下面上实战。 3.在代码中如何使用多线程(线程池的方式) 我就说我在项目中看到的都是使用spring提供的ThreadPoolTaskExecutor而并没有使用jdk提供的ThreadPoolExecutor并不是说不可以肯定是因为spirng提供的更简单它提供的IOC自动注入使用相关注解直接使用比我们自己去创建对象更方便也更实用。但是一定不要使用Executors.newFixedThreadPool这玩意去创建阿里开发规范中也明确禁止为什么禁止 1. 隐藏关键配置参数Executors提供的便捷方法通常会隐藏线程池的重要配置参数比如线程池的大小、工作队列类型及容量、拒绝策略等。     这限制了开发者对线程池行为的精确控制和优化可能导致资源使用不当或性能问题。 2. 潜在的资源耗尽风险    (1)newFixedThreadPool和newSingleThreadExecutor使用的是无界队列通常为LinkedBlockingQueue       这意味着如果生产任务的速度超过消费速度队列会无限增长最终可能导致内存耗尽Out Of Memory Error。    (2)newCachedThreadPool创建的是一个线程数量无界的线程池当大量短期异步任务提交时可能会迅速创建大量线程消耗过多系统资源 总结一句缺少参数配置不可控可能会造成OOM消耗过多的系统资源。 如何使用 1.创建相关的配置类起个名字一般叫XxxThreadPoolConfig(Xxx为相关的业务的名称) Component Configuration public class TestThreadPoolConfig {Bean(test_thread_pool) // 设置默认线程名称public Executor ticketing() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();executor.setThreadNamePrefix(test_thread_pool-);executor.setMaxPoolSize(80); // 设置最大线程数executor.setCorePoolSize(40);//设置核心线程数executor.setQueueCapacity(100);executor.setKeepAliveSeconds(300);// 设置线程活跃时间秒executor.setAllowCoreThreadTimeOut(true);executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 设置拒绝策略executor.setWaitForTasksToCompleteOnShutdown(true); // 等待所有任务结束后再关闭线程池executor.initialize();return executor;}} 2.在启动类上加上开启异步的注解EnableAsync SpringBootApplication EnableAsync public class SystemAdminApplication {public static void main(String[] args) {SpringApplication.run(SystemAdminApplication.class,args);} } 3.在对应的耗时接口ServiceImpl上直接使用注解Async(xxx)xxx为配置中Bean中的名字 Async(test_thread_pool)public String testThread() {try {Thread.sleep(10000);} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println(666666666666666);return hello;} 4.总结 为什么要使用多线程哪些业务中用到了(实际开发业务中)怎么用的(多线程的创建方式) (1)处理耗时操作提高响应速度举例 (2)充分利用系统cpu的资源 (3)提高系统的并发量拿上述的comcat来举例 (4)你怎么使用的也就是项目如何用的说我总结的第三点具体Service业务如果不知道怎么编自己上网搜搜比如发送邮件读取文件等等我的话肯定就是说自己项目中遇到的业务。   本人还是菜鸟错误还希望大佬指点。。。。。。。
http://www.dnsts.com.cn/news/53669.html

相关文章:

  • 成都专业做网站wordpress最详细的教程
  • 保定行业网站维护网页
  • wordpress网站多语言深圳淘宝运营培训
  • 物联网网站的建设和维护云服务器建站
  • 网站如何做下载文档企业网站做开放api
  • 网站用户体验评价方案自家电脑做网站服务器w7花生壳
  • 哪个网站可以用来做读书笔记淘宝seo优化推广
  • 做后台网站福建建筑人才网官网
  • 浙江响应式网站建设公司wordpress 改模板目录
  • 大良营销网站建设市场seo排名优化方法
  • 建站优化收费从网站下载壁纸做海报涉及
  • 网站建设过程中准备的工作中国有多少个网站
  • 做网站好找工作吗网站文章更新
  • 加强网站政务服务建设方案购物网站订单状态模板
  • 网站建设源码开发wordpress设置页面403权限
  • 广西桂林网站建设深圳建筑信息平台
  • 国内单页面网站微信小程序前端开发框架
  • 广州网站优化渠道招生推广渠道有哪些呢
  • 江门做网站软件国内cms
  • 成免费crm特色学生版的特点晋江seo
  • 海南棋牌网站建设免费做app网站
  • 网站空间密码wordpress文件下载漏洞
  • 网站建设从零开始如何在淘宝开网站建设
  • 哪些属于功能型网站wordpress 主题开心版
  • 企业网站会员功能合肥百度快照优化排名
  • 国外网页设计分享网站婚纱网站建设案例
  • 盈佳国际天天做赢家网站wechat下载
  • 网站设计 原型图拆车件网上商城
  • 企业怎么做网站产品网络营销
  • 猪八戒网站做软件十大免费绘图软件