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

网站建设的自我总结凡科建站模板

网站建设的自我总结,凡科建站模板,如何修改wordpress主题,贵州网站建设模板点击上方蓝字 关注我们面试官您好#xff0c;我是来面试的您好#xff0c;我是这次的面试官#xff0c;先介绍一下自己把我是女孩#xff0c;blala ....那问一个多线程的问题吧#xff0c;在一个多线程的环境中#xff0c;怎么能保证一系列方法的执行顺序呢#xff1f;… 点击上方蓝字  关注我们面试官您好我是来面试的您好我是这次的面试官先介绍一下自己把我是女孩blala ....那问一个多线程的问题吧在一个多线程的环境中怎么能保证一系列方法的执行顺序呢01PART题目比如我们有三个方法类似以下代码static void Methond1(){Console.WriteLine(${Thread.CurrentThread.Name} 执行 第一个方法);}static void Methond2(){Console.WriteLine(${Thread.CurrentThread.Name} 执行 第二个方法);}static void Methond3(){Console.WriteLine(${Thread.CurrentThread.Name} 执行  第三个方法);}} 分别初始化三个线程去执行这三个方法每个线程执行的方法可以任意指定但是方法的执行顺序必须是Methond1》Methond2》Methond3示例输入321  第一个线程执行方法3第二个线程执行方法2第三个线程执行方法1输出Methond1的输出》Methond2的输出》Methond3 的输出 即xxx执行 第一个方法xxx执行 第二个方法xxx执行 第三个方法面试官大哥我好像不会哦没关系留下你的联系方式如果可以我们会有后续人员联系你的感谢你来面试          02PART题解分析这道题本质上考的是多线程环境资源竞争的问题在多线程环境下要想以固定某个顺序执行方法必须要有一个类似屏障的东西来阻止不该执行的线程或者换句话说必须要有一个机制来顺序化多个线程。这也是我们平时多线程开发环境中必须要面对的问题现代服务器的cpu都是多核心我们平时用的最多的javac#等高级语言是能够利用服务器多核心这个优势的这里是一个进程内多线程就可以利用多核心。当然也有一些别的技术比如Nodejs虽然执行是单线程的但是可以利用多进程来提高多物理cpu的利用率。说的有点远了接下来还是看这道题这道题目考验的是多线程下资源的竞争问题和线程间的通信问题说的直白一点就是Methond1未执行之前任何方法都不能执行这里是指方法内的代码Methond1执行完之后会通知执行Methond2的线程Methond2开始执行Methond2执行完毕会通知执行Methond3的线程以此类推。所以这道题的关键在于阻塞某个线程执行和通知某个线程执行。在很多语言中都提供了lock的机制或者信号量的机制。这些都是可以实现线程间通信的的解决方案当然最简单暴力的方式还是通过共享变量的方式来实现通知虽然有很多缺陷但是在很多情况下确实是最简单快捷的方案。下边就以c#语言为例class Program{//把三个方法分别对应到 委托为了方便执行方法static Action FirstAction  Methond1;static Action SecondAction  Methond2;static Action ThirdAction  Methond3;static Dictionaryint, Action ActionDic  new Dictionaryint, Action() { { 1, FirstAction }, { 2, SecondAction }, { 3, ThirdAction } };static void Main(string[] args){while (true){Console.WriteLine(请输入顺序);var inputStr  Console.ReadLine();IsFinish1  IsFinish2  false;var input  inputStr.Split(,).Select(s  int.Parse(s));foreach (var i in input){var method  ActionDic.GetValueOrDefault(i);Thread t  new Thread(method.Invoke);t.Name  线程  i;Console.WriteLine(${t.Name} 执行方法 {method.Method.Name});t.Start();}}}static object objLock  new object();static bool IsFinish1  false; //第一方法是否执行完毕static bool IsFinish2  false; //第二方法是否执行完毕static void Methond1(){Console.WriteLine(${Thread.CurrentThread.Name} 执行 第一个方法);IsFinish1  true;}static void Methond2(){while (true){if (IsFinish1){Console.WriteLine(${Thread.CurrentThread.Name} 执行 第二个方法);IsFinish2  true;break;}}}static void Methond3(){while (true){if (IsFinish2){Console.WriteLine(${Thread.CurrentThread.Name} 执行  第三个方法);break;}}}} 测试执行请输入顺序2,3,1线程2 执行方法 Methond2线程3 执行方法 Methond3线程1 执行方法 Methond1请输入顺序线程1 执行 第一个方法线程2 执行 第二个方法线程3 执行  第三个方法3,2,1线程3 执行方法 Methond3线程2 执行方法 Methond2线程1 执行方法 Methond1请输入顺序线程1 执行 第一个方法线程2 执行 第二个方法线程3 执行  第三个方法不要太纠结以上的代码以上只是作为抛砖引玉的作用就算是有执行错误思路我觉得还是没有问题的当然确实有很多要优化的地方比如等待执行的线程一直在耗费cpu资源的情况可以替换为自旋锁或者混合锁有兴趣的同学可以进行优化一番。               03PART公司简介但是作为语法很优秀的c#怎么能就此止步呢c#本身提供了Task的机制可以把它看做是类似golang的协程虽然不是很像。基于task的机制我们很容易就完成task的 ContinueWith机制就是为此而生的它可以很方便的把多个并行的task串行化有兴趣的同学可以试一下但是我要说的并非ContinueWith。既然要执行的顺序化如果我把执行的代码放在有顺序的容器中然后按照顺序去执行岂不快哉不多废话class TaskTest{static FuncTask FirstAction  Methond1;static FuncTask SecondAction  Methond2;static FuncTask ThirdAction  Methond3;static Dictionaryint, FuncTask ActionDic  new Dictionaryint, FuncTask() { { 1, FirstAction }, { 2, SecondAction }, { 3, ThirdAction } };static FuncTask[] tList  new FuncTask[3];public static void Start(){while (true){Console.WriteLine(请输入顺序);var inputStr  Console.ReadLine();var input  inputStr.Split(,).Select(s  int.Parse(s));foreach (var i in input){var method  ActionDic.GetValueOrDefault(i);tList[i-1]  method;}foreach (var t in tList){t.Invoke().Wait();}}}static Task Methond1(){return Task.Run(() {Console.WriteLine(${Thread.CurrentThread.Name} 执行 第一个方法);});}static Task Methond2(){return  Task.Run(()  {Console.WriteLine(${Thread.CurrentThread.Name} 执行 第二个方法);});}static Task Methond3(){return Task.Run(()  {Console.WriteLine(${Thread.CurrentThread.Name} 执行  第三个方法);});}} 测试请输入顺序2,3,1 执行 第一个方法 执行 第二个方法 执行  第三个方法请输入顺序3,2,1 执行 第一个方法 执行 第二个方法 执行  第三个方法请输入顺序1,3,2 执行 第一个方法 执行 第二个方法 执行  第三个方法请输入顺序是不是很爽毫不犹豫的说c#是一门很优秀的语言在并发方面做的很优秀。以上Task的代码并非是最优代码比如 可以用Await来代替 wait这样的话在真实环境中可以释放当前线程来提高吞吐量记住await方式提高的吞吐量并非缩短了单次请求的执行时间。                      助你早日进入谷歌完●程序员过关斩将-- 喷一喷坑爹的面向UI编程●程序员过关斩将--redis做消息队列香吗●程序员修神之路--有了容器为什么kubernetes还需要Pod●程序员修神之路--为什么我会了SOA你们还要逼我学微服务●程序员过关斩将--要想获取我的用户信息就得按照规矩来●程序员过关斩将--更加优雅的Token认证方式JWT●程序员过关斩将--cookie和session的关系其实很简单●程序员修神之路--用NOSql给高并发系统加速●程序员修神之路--高并发系统设计负载均衡架构●程序员过关斩将--你为什么还在用存储过程●程序员修神之路--问世间异步为何物●程序员修神之路--提高网站的吞吐
http://www.pierceye.com/news/885143/

相关文章:

  • 唯品会网站建设建议浙江网站建设价格费用
  • 网站建设购买深圳有做网站的公司有哪些
  • 网站预算表怎么做网站域名续费怎么续费
  • 宁波建设网站公众号关注编辑网站教程
  • 怎样自己做刷赞网站开发软件需要多少成本
  • 为什么网站之有首页被收录广西两学一做网站
  • 制作网站需要的软件怎么向google提交网站
  • 济南网站的建设公司网站建设征求意见表
  • 小学校园网站建设简介打开网站弹出一张图片 怎么做
  • 做外贸没有网站需要注意什么条件做简历模板的网站都有哪些
  • 铜陵保障性住房和城乡建设网站舞钢市城乡建设局网站
  • 企业网站总承包建设模式关键步骤凡科论文送审平台
  • 石家庄学校网站建设在线定制签名
  • 新泰网站制作公司免费下载百度seo
  • 江苏海宏建设工程有限公司网站免费软件是怎么盈利的
  • 建设网站需要申请什么推广网站排名
  • 怎么看出网站是dede做的网页的响应式布局
  • 中国农村建设网站静安广州网站建设
  • 全国 做网站的企业wordpress+编辑模板
  • 网站开发需要的编程软件有哪些海门住房和城乡建设局网站
  • 南宁上林网站建设交换链接是什么
  • 什么网站做简历好api模式网站开发
  • 网站建设与管理专业好吗网络推广seo培训班
  • 常用网站架构辽宁建设工程信息网审计报告
  • 绿色大气网站模板坪山网站建设公司
  • 网站建设动态wordpress禁止自动升级
  • 网站建设网站建设平台网站建设费计入什么科目比较好
  • 豪圣建设项目管理网站公司网站设计与管理
  • 网站开发很难么交互网站图
  • 做网站用什么语音网站开发绪论