一 : 我们15个刘志轩放弃万元订单原因是什么?为什么要放弃订单?
我们15个刘志轩放弃万元订单原因是什么?为什么要放弃订单?我们15个刘志轩放弃万元订单原因大爆料。
《我们15个》最新消息,近日,有神秘人预订刘志轩的一套画,并将得到了10000元的定金。但在昨晚平顶分享会上,刘志轩决定放弃万元的肖像画订单,自认才疏学浅。
我们15个刘志轩放弃万元订单原因是什么?为什么要放弃订单?
昨晚,按照计划,居民们开起了平顶分享会,而今晚分享的嘉宾是刘志轩。在分享会即将接近尾声时,刘志轩说道:“我是一个设计师,我讨厌画画,我讨厌画家,我讨厌做T恤,我讨厌做任何量产化的东西,因为我自认为我是一个精致的人,我做的东西也必须是精致的。”并将自己要放弃万元的肖像画订单的决定告诉了居民们。
他说:“来到平顶最难熬的是今天,我决定推掉那个一万块的单子。” 当易秋问他为什么时,他说:“ 我不怪别人,我只怪自己才疏学浅,订单的要求我可能没有办法达到,我没有能力让他收到这个东西,与其我赚了这一万块,不如老老实实承认自己做不到,我不应该糊涂的接了这个单子,今天挣扎了一天。”而居民们则纷纷表示支持,同意刘志轩的决定。
张杰希望刘志轩可以做自己喜欢做的,易秋则安慰刘志轩说这方面不要有压力。看到这里,网友们则有不同的意见,很多网友弹幕说:“一开始就知道马桶盖画不出来”、“承认自己不行了吧”,但更多的网友则表示:“能承认自己的不足,也真是不容易。”、“在节目上公开这种决定,马桶盖这次像个男人。”
二 : 为什么要放弃使用Thread.Sleep
前言
此文并不是说要完全放弃使用 www.61k.com ,而是要说明在符合哪些情况下使用!
场景
很多时候,我们会需要一个定时服务来处理业务。[ www.61k.com )
但并不是死死的每隔N分钟执行一次那种,而是在一次处理完后,算好下一次处理的时间点。
当到达此时间点,触发程序重新开始执行代码。
普遍做法
普遍的情况下,都是使用while(true){ www.61k.com ()}来实现,废话不多话,看代码版本1:
class Program{static void Main(string[] args){var workLists = new List<string>() { "任务1", "任务2", "任务3", "任务4" };foreach (var task in workLists){var thread = new www.61k.com (new www.61k.com rizedThreadStart( www.61k.com )); www.61k.com (task);} }}
class Work{public static void DoWork(object target){var taskType = target as string;var interval = 1 * 60 * 1000;//处理失败,1分钟后重试var maxTimes = 5;var retryTimes = 0;while (true){while (retryTimes < maxTimes){var ok = Proccess(taskType);if (ok){retryTimes = maxTimes;}else{retryTimes++; www.61k.com .Sleep(interval);}}var tim = GetTotalMillisecondsForNext();//计算离下一次开始处理的时间 www.61k.com .Sleep(tim);//挂起一段时间后,重新唤醒retryTimes = 0;}}private static bool Proccess(string taskType){ www.61k.com e("开始执行处理:{0}", taskType);return true;}private static int GetTotalMillisecondsForNext(){//这里根据自己的业务来决定return 2 * 1000;}}
代码简单易懂。
分析
版本1中,循环强制创建线程,并使用 www.61k.com .Sleep(tim)来挂起线程,然后重新唤醒。
这种方式不好之处在于:占用系统线程资源,是一种浪费。如同占着茅坑不拉屎!线程是一种十分宝贵的资源,创建,销毁,切换 都是相当耗性能的。
当Sleep的时候,就等于说:现在我不用,但是你也别想用。你要用?自己去Create一个。
有的人说,Sleep的时候 不占用CPU啊!对,是不占用CPU ,但是占着线程资源,阻碍系统的线程调度!
可以参考下这文章
Threads are a limited resource, they take approximately 200,000 cycles to create and about 100,000 cycles to destroy. By default they reserve 1 megabyte of virtual memory for its stack and use 2,000-8,000 cycles for each context switch.This makes any waiting thread a huge waste.
改进
使用 www.61k.com 来改进我们的程序。当执行处理业务的代码时,首先把timer停止,处理完毕后,算好一次执行的时间点,赋给timer并启动,看代码版本2
classProgram{staticvoidMain(string[] args){varworkLists =newList<string>() {"任务1","任务2","任务3","任务4"}; www.61k.com (workLists,newParallelOptions() { MaxDegreeOfParallelism =3},(task)=> {newWork2() { TaskType =task }.DoWork(); }); www.61k.com ();}}
classWork2{privateTimer _workTimer;publicstringTaskType {get;set; }publicvoidDoWork(){_workTimer= www.61k.com .Timer();_ www.61k.com =1000;_ www.61k.com +=newElapsedEventHandler(TimerHanlder);_ www.61k.com ();}privatevoidTimerHanlder(objectsender, ElapsedEventArgs e){_ www.61k.com ();varinterval =1*60*1000;//处理失败,1分钟后重试varmaxTimes =5;varretryTimes =0;while(retryTimes <maxTimes){varok =Proccess();if(ok){retryTimes=maxTimes;}else{retryTimes++; www.61k.com .Sleep(interval);}}vartimes =GetTotalSecondsForNext(); www.61k.com e("{0}秒后重新执行", times);_ www.61k.com = times *1000;//计算离下一次开始处理的时间_ www.61k.com ();}privateboolProccess(){ www.61k.com e("开始执行处理:{0}", TaskType);returntrue;}privateintGetTotalSecondsForNext(){//这里根据自己的业务来决定return3;}}
特别说明一下:Main方法中的 www.61k.com ();很重要,让主线程处于等待的状态,子线程就可以一直执行下去不中断
总结
1:使用Task,而不是使用new www.61k.com 。是否要创建线程,应该让系统来决定,利用可复用资源
2: www.61k.com .Sleep(interval);只合适在 "有限度的 " 循环场景中,比如 最多重试N次、倒计时等等
如果不对之处,请各位斧正!
三 : 人为什么要学会放弃
[学会放弃]人为什么要学会放弃——简介61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1