单一原则丢到软件中,在哪都能摆一摆,比如线程,一个线程一次只能做一件事,这算不算单一(标题党),如果处理一个很长的业务,由一个线程完成,那我们将会面对一个长时间未响应的软件(你一定见过),了解多线程,需要简单的对线程分个类(其实吧,分类就是为了单一原则)
UI线程,主线程
不管什么软件,总得有个跟人打交道的地方吧,总得能跟人进行交互吧,比如一个浏览器,一个窗口,就算只能显示命令行也行吧,这就是UI线程,他也许不是真正的主线程,但对于下面的线程来说,他就是大哥了
特点:主要用于跟用户进行交互,有时会兼职渲染,也可作简单的逻辑处理,长时间处理业务(3-5s),会变成未响应状态(可以理解为心跳机制,系统有个线程去跟每个UI线程进行联系,如果这个UI线程一直在做逻辑处理,过了5s来不跟检测线程通信,那他就会被处理为未响应状态)
大多数情况下5s是够用的,万一不够用,可以开启一个线程去处理逻辑,而UI线程可以告诉客户,"正在拼命实现中,请稍等",或者提供个其他的界面,通过回调机制进行线程完成的回复,回调机制是必须的
逻辑线程
大多数情况下会超过3-5s,复杂是必须的,相当复杂的时候我可能需要再开子逻辑线程去进行事物的处理,比如多线程下载,此时,当前逻辑线程就会分发各种子线程去处理事务,而后通过回调机制进行终结,最终汇总,交给主线程,当然在逻辑线程没有时间限制,所以也完全可以使用while(true)的方式判读子线程是否完成,而后汇总
逻辑子线程
最后的线程,由逻辑线程打开,时间不是打开的标准,业务逻辑才是
很显然,UI线程是相当强大的,一般也不是小码农开发的(- -),监听机制也可以简单的理解为一个while(true)的逻辑线程(说是子线程也行),我们一般需要打开一个逻辑线程,以释放UI线程
把思路放开,我们将开启逻辑线程理解为丢给服务器,将整个线程至于互联网中...那么
比如一般的项目会将数据库操作交给后台(这是必须的),而简单的逻辑计算交给js(当然可以),如果是一个比较耗时间的算法呢?既有js版,又有java版?你会怎么做?
既然扯到了后台,换一种比较方式liquidsky(传说渣机也能玩高端游戏的服务),你觉得他的实现原理会很难吗?
当然将浏览器理解为UI线程,而js是在UI线程上的操作,不知道能不能解释,为什么js没有sleep
总之,理解才能万岁,想想当年还在好奇js为什么没有sleep的时候,还真是可爱