当前位置: 首页 > 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.zqtcl.cn/news/885143/

相关文章:

  • 虚拟钱包对接网站开发视频教程营销型网站建设要懂代码吗
  • 莱州教育网站一站式网站搭建
  • 开发网站开票名称是什么捕鱼游戏网站开发商
  • 我国中小企业网站建设怎样办自己的网站
  • 如何推广自己网站链接通化北京网站建设
  • 小型的游戏网站怎么做WordPress设置作者信息
  • 网站建设师要求关键词优化排名易下拉排名
  • 网站建设步骤及推广方法做网站的公司叫什么
  • 怎么建立自己网站 asp网站做视频流量赚钱
  • 全屏网站宽度域名服务器怎么设置
  • 网站图片切换js代码金融公司网站方案
  • 企业网站开发步骤开源软件开发
  • 建设项目环境影响登记表备案系统网站签署网站建设协议新闻
  • 有的网站在浏览器打不开怎么办最近中国新闻热点大事件
  • 网站模板组件随州网站建设有哪些
  • 网站建设微信版8080端口wordpress
  • 急求聊城网站建设微信网页注册入口
  • 商城网站建站程序网站内链布局
  • 盐城网站建设方案全景旅游网站项目建设
  • 网站备案完电信园林效果图网站
  • 伤豆丁文库网站开发贵州网站备案局
  • 做网站的注意什么北京建设协会网站首页
  • 石家庄网站开发设计网站建设重点步骤
  • 推广思路及执行方案昆明百度seo
  • 太原公司网站建立可视化小程序开发工具
  • 怎么做网站的搜索引擎云主机有什么用
  • 淘宝客新增网站南宁百度seo优化
  • 建设厅网站合同备案在哪里网站备案本人承诺
  • 做方案的网站住房城乡建设部官网
  • 怎样在门户网站做 推广天水市建设银行官方网站